⑴ 如何用MATLAB神經網路工具箱創建BP神經網路模型
1. 常用的前饋型BP網路的轉移函數有logsig,tansig,有時也會用到線性函數purelin。當網路的最後一層採用曲線函數時,輸出被限制在一個很小的范圍內,如果採用線性函數則輸出可為任意值。以上三個函數是BP網路中最常用到的函數,但是如果需要的話你也可以創建其他可微的轉移函數。
2. 在BP網路中,轉移函數可求導是非常重要的,tansig、logsig和purelin都有對應的導函數dtansig、dlogsig和dpurelin。為了得到更多轉移函數的導函數,可以帶字元"deriv"的轉移函數:tansig('deriv')
⑵ 1.如何用MATLAB神經網路工具箱創建BP神經網路模型具體有哪些步驟請高手舉實例詳細解釋下 2.如何把輸
%人臉識別模型,臉部模型自己找吧。
function mytest()
clc;
images=[ ];
M_train=3;%表示人臉
N_train=5;%表示方向
sample=[];
pixel_value=[];
sample_number=0;
for j=1:N_train
for i=1:M_train
str=strcat('Images\',num2str(i),'_',num2str(j),'.bmp'); %讀取圖像,連接字元串形成圖像的文件名。
img= imread(str);
[rows cols]= size(img);%獲得圖像的行和列值。
img_edge=edge(img,'Sobel');
%由於在分割圖片中我們可以看到這個人臉的眼睛部分也就是位於分割後的第二行中,位置變化比較大,而且眼睛邊緣檢測效果很好
sub_rows=floor(rows/6);%最接近的最小整數,分成6行
sub_cols=floor(cols/8);%最接近的最小整數,分成8列
sample_num=M_train*N_train;%前5個是第一幅人臉的5個角度
sample_number=sample_number+1;
for subblock_i=1:8 %因為這還在i,j的循環中,所以不可以用i
block_num=subblock_i;
pixel_value(sample_number,block_num)=0;
for ii=sub_rows:(2*sub_rows)
for jj=(subblock_i-1)*sub_cols+1:subblock_i*sub_cols
pixel_value(sample_number,block_num)=pixel_value(sample_number,block_num)+img_edge(ii,jj);
end
end
end
end
end
%將特徵值轉換為小於1的值
max_pixel_value=max(pixel_value);
max_pixel_value_1=max(max_pixel_value);
for i=1:3
mid_value=10^i;
if(((max_pixel_value_1/mid_value)>1)&&((max_pixel_value_1/mid_value)<10))
multiple_num=1/mid_value;
pixel_value=pixel_value*multiple_num;
break;
end
end
% T 為目標矢量
t=zeros(3,sample_number);
%因為有五類,所以至少用3個數表示,5介於2的2次方和2的3次方之間
for i=1:sample_number
% if((mod(i,5)==1)||(mod(i,5)==4)||(mod(i,5)==0))
if(i<=3)||((i>9)&&(i<=12))||((i>12)&&(i<=15))
t(1,i)=1;
end
%if((mod(i,5)==2)||(mod(i,5)==4))
if((i>3)&&(i<=6))||((i>9)&&(i<=12))
t(2,i)=1;
end
%if((mod(i,5)==3)||(mod(i,5)==0))
if((i>6)&&(i<=9))||((i>12)&&(i<=15))
t(3,i)=1;
end
end
% NEWFF——生成一個新的前向神經網路
% TRAIN——對 BP 神經網路進行訓練
% SIM——對 BP 神經網路進行模擬
% 定義訓練樣本
% P 為輸入矢量
P=pixel_value'
% T 為目標矢量
T=t
size(P)
size(T)
% size(P)
% size(T)
% 創建一個新的前向神經網路
net_1=newff(minmax(P),[10,3],{'tansig','purelin'},'traingdm')
% 當前輸入層權值和閾值
inputWeights=net_1.IW{1,1}
inputbias=net_1.b{1}
% 當前網路層權值和閾值
layerWeights=net_1.LW{2,1}
layerbias=net_1.b{2}
% 設置訓練參數
net_1.trainParam.show = 50;
net_1.trainParam.lr = 0.05;
net_1.trainParam.mc = 0.9;
net_1.trainParam.epochs = 10000;
net_1.trainParam.goal = 1e-3;
% 調用 TRAINGDM 演算法訓練 BP 網路
[net_1,tr]=train(net_1,P,T);
% 對 BP 網路進行模擬
A = sim(net_1,P);
% 計算模擬誤差
E = T - A;
MSE=mse(E)
x=[0.14 0 1 1 0 1 1 1.2]';
sim(net_1,x)
⑶ Google 的神經網路生成圖像 是怎麼做到的
你這個不是一般人能回答的,可以查資料,我畢業論文做的就是車牌基於神經網路生成圖像,但是那個簡單,人家也不告訴你啊
⑷ 如何基於opencv使用神經網路實現圖像識別
本科生自己下載代碼就可以啦,github一大把,一般是在Linux下吧,如果要求很高的性能,建議購買計算機能力較強的顯卡,然後利用CUDA框架進行提速。
⑸ 卷積神經網路怎麼生成圖片
需要使用類似GAN的生成模型去做。望採納
GAN的基本原理其實非常簡單,這里以生成圖片為例進行說明。假設我們有兩個網路,G(Generator)和D(Discriminator)。正如它的名字所暗示的那樣,它們的功能分別是:
G是一個生成圖片的網路,它接收一個隨機的雜訊z,通過這個雜訊生成圖片,記做G(z)。
D是一個判別網路,判別一張圖片是不是「真實的」。它的輸入參數是x,x代表一張圖片,輸出D(x)代表x為真實圖片的概率,如果為1,就代表100%是真實的圖片,而輸出為0,就代表不可能是真實的圖片。
在訓練過程中,生成網路G的目標就是盡量生成真實的圖片去欺騙判別網路D。而D的目標就是盡量把G生成的圖片和真實的圖片分別開來。這樣,G和D構成了一個動態的「博弈過程」。
⑹ 如何建立神經網路模型
人工神經網路有很多種,我只會最常用的BP神經網路。不同的網路有不同的結構和不同的學習演算法。
簡單點說,人工神經網路就是一個函數。只是這個函數有別於一般的函數。它比普通的函數多了一個學習的過程。
在學習的過程中,它根據正確結果不停地校正自己的網路結構,最後達到一個滿意的精度。這時,它才開始真正的工作階段。
學習人工神經網路最好先安裝MathWords公司出的MatLab軟體。利用該軟體,你可以在一周之內就學會建立你自己的人工神經網路解題模型。
如果你想自己編程實現人工神經網路,那就需要找一本有關的書籍,專門看神經網路學習演算法的那部分內容。因為「學習演算法」是人工神經網路的核心。最常用的BP人工神經網路,使用的就是BP學習演算法。
⑺ 使用神經網路的plot命令繪圖,如何使繪出來的圖有網路
grid on 加網格
grid off 去網格
⑻ 圖神經網路是怎麼煉成的:GNN基本原理簡介
此文算是對Google Research這篇 A Gentle Introction to Graph Neural Networks 神作的閱讀筆記.
十多年來,研究人員開發了一種稱之為圖神經網路(Graph Neural Networks,GNNs)的技術,旨在將如今在深度學習的諸多任務中摧枯拉朽的神經網路,應用到圖結構之上,從而讓神經網路捕捉到更錯綜復雜的交叉特徵,以期待在一些任務上取得更佳的效果。鑒於操作圖數據結構的復雜性,盡管已經發展了十幾年,它在實際應用中卻剛剛起步,即時是google也才開始研究將其被應用到葯品研發、物理模擬、假新聞檢測、交通預測和推薦系統等領域。
盡管GNN是一個新興的研究領域,但圖結構的數據其實在我們身邊無處不在。那麼什麼是圖呢?
這個理科生應該都清楚,圖有點(Vertex)和邊(Edge)兩部分組成,一個圖就代表了各個實體節點(node)之間的關系(edge):
每個節點或者邊都可以包含它的一些屬性信息,比如如果一個節點表示一個人,那麼就可以包含這個人的姓名、性別、身高、體重之類的..我們研究需要的信息。
而這些信息,都可以用通用的向量的形式存入其中:
還有別忘了一點,邊是可以有方向的,按此我們還能分為有向圖或是無向圖。邊的方向代表了信息的傳遞方向,例如a是b的微信好友,那b也是a的微信好友,好友關系自然是沒方向的,而比如a是b的爹,那顯然b就不是a的爹,此時叫爹的關系就是有有方向的。
圖結構的構建是非常靈活的,可以根據個人的設計構建出各種不一樣的圖。而作為開發者顯然要結合實際解決的問題來構建合適的圖。
正如前面所提到的,圖無處不在。你可能已經熟悉例如知識圖譜、社交網路之類的圖數據。當時顯然,圖是一種極其強大的通用數據表示,傳統神經網路中用到的歐式空間的數據,同樣可以用圖來表示,例如可以將圖像和文本建模為圖結構數據。
比如,我們可以將一張圖片的每個像素作為圖的節點,再將相鄰的像素用邊連接起來,就構造了一個該圖像的圖。
如上圖展示了一個5*5的圖片的鄰接矩陣表示和圖表示。
我們將每個單詞作為節點,並將每個節點連接到下一個節點,就得到了一個文本的圖:
當然,在實踐中我們並不會這樣來編碼文本和圖像,因為所有的圖和文本都是非常規則的結構,表示成圖就多此一舉了。
我們再來看一些例子,這些數據的結構更加復雜,除了圖之外很難用其他方式來表達。
分子是構成物質的基石,我們可以用節點來表示它的原子和電子,用邊來表示共價鍵,這樣便將一個分子表示成了一個圖:
不同的圖可以表示出不同的分子結構:
都說社會是一個大熔爐,身處其中的人和事物之間會發生極其復雜的關系。這種關系的表示用普通的表格數據是很難表示的,而圖卻能很好的展現。
下圖是將莎士比亞歌劇《奧賽羅》中的任務關系表示成圖:
怎麼樣,如果沒看過歌劇能推測出那些是主角嗎?
下面是將一個空手道競標賽的對戰關系構建為圖:
類似的可以表示為圖的數據還有很多很多,比如論文的引用之類統統都可以表示為圖,下面是現實世界中不同規模的數據圖表示的統計數據:
可見,各種各樣規模的數據都可以輕松的用圖來表示。
在上面我們列舉了這么多的圖,那麼我們該對這些圖數據執行什麼任務呢?
圖上的預測任務一般分為三類:
下面我們通過具體的示例來說明GNN怎麼來解決上述的三個級別的預測問題。
在圖級別的任務中,我們的目標是預測整個圖的屬性。例如我們通過分子圖,來預測該分子的氣味或是者它是否是與某些疾病有關的受體。
它的輸入是完整的圖:
輸出是圖的分類:
節點級任務一般就是預測每個節點的類型。
一個經典的例子就是Zach的空手道俱樂部。該數據集市一個單一的社交網路圖,猶豫政治分歧,講師Hi先生和管理員John之間不和導致空手道俱樂部分裂,其中的學員一部分效忠於Hi先生,一部分效忠於John。每個節點代表空手道聯系著,邊代表空手道之外這些成員的互動,預測問題就是判斷這些節點是效忠於誰的。
邊級任務其實就是預測每個邊的屬性.
在目標檢測的語義分割任務中,我們也許不止要識別每個目標的類型,還需要預測各個目標之間的關系.我們可以將其描述為邊級別的分類任務:給定表示圖像中的對象的節點,我們希望預測哪些節點共享一條邊,或者該邊的值是多少。如果我們希望發現實體之間的連接,我們可以考慮圖是完全連通的,並根據它們的預測值修剪邊來得到一個稀疏圖。
用圖表示就是這樣的過程:
那麼我們要如何使用神經網路來處理上述各種類型的任務呢?
首先要考慮的是如何將圖結構數據適配到神經網路.
回想一下啊,傳統的神經網路輸入的往往是矩陣形式的數據,那麼要如何把圖作為輸入呢?
圖表示有四種類型的信息:節點(nodes),邊(edges),全局上下文(global-context),聯通性(connectivity).對於前三種信息,有一個非常簡單的方案,比如將節點排序,然後每個節點表示為一個向量,所有節點就得到了一個節點的矩陣,同理,邊和上下文也可以這么搞.
但是要標識連通性就沒有這么簡單了,也許你會想到用臨街矩陣來表示,但是這樣表示會有明顯的缺陷,因為節點數的規模往往是巨大的,對於一個數百萬節點的圖,那將耗費大量的空間,而且得到的矩陣往往也十分的稀疏,可以說空間利用率會很低.
當然,你也許會想,可以用稀疏矩陣來存儲,這樣就只需要存儲連通的情況,空間利用率將大大提升,但是我們還要考慮到一點,就是稀疏矩陣的高性能計算一直是個艱難的,尤其是在用到GPU的情況.
並且,使用鄰接矩陣還有一個問題就是各種不同的鄰接矩陣可以標識相同的連通性,而這些矩陣並不能保證在神經網路中取的相同的效果.比如,同樣的連通性,通過調換列的順序,就能得到不同的鄰接矩陣:
現在,我們成功的將圖結構成功表示成了置換不變的矩陣格式,終於可以使用圖形神經網路(GNN)來做圖形預測任務了。
GNN是對保持圖對稱性(置換不變性)的圖的所有屬性(節點、邊、全局上下文)的可優化變換。
我們將使用Gilmer等人提出的「消息傳遞神經網路」框架構建GNN,並使用Battaglia等人介紹的圖網路網路架構示意圖。GNNS採用「圖輸入,圖輸出」架構,這意味著這些模型類型接受圖作為輸入,其中包含節點,邊和全局上下文的信息,並逐步地轉換這些圖嵌入,而不會更改輸入的連接圖結構。
我們使用最開始提到的那個圖來構建一個最簡單的GNN,輸入的圖是相應節點,邊,全局信息的向量,我們針對每個向量使用一個MLP層來作變換,於是得到一個新的圖.
針對上述構建的最簡單的GNN,我們如何在上面描述的任何任務中進行預測呢?這里我們僅僅考慮二進制分類的情況,但這個框架可以很容易地擴展到多類或回歸的情況。
如果是對節點分類,我們只要在最後一層接一個線性類器就可以了:
但是上面的預測過程有點過於簡單了,完全沒有用到圖的結構信息,我們在此基礎上增加一個pooling操作,以增加它的邊緣信息:
具體操作是把待預測節點的鄰居節點以及全局的信息進行聚合再做預測,即將這些embedding向量加到一起得到一個新的向量,再輸入到最後的線性分類器.
同理,如果我們只有節點相應邊的信息的話,也可以用類似的方式pooling,然後得到節點的向量表示再輸入分類器:
反之,如果我們只有節點的信息,那麼也可以用邊所連接的兩個節點來pooling出邊的向量,然後將器輸入到分類器預測邊的類型:
顯然,不管是哪種任務,整個GNN的推理過程都是一樣的,可以表示為這樣一個端到端的過程:
不過,顯而易見的,這個簡單的GNN在分類前只是對每個向量進行了一個變換,而沒有用到圖結構的任何信息,雖然在最後做預測的時候做了一些pooling的聚合,但也始終沒有用到adjacency的信息,因此這個GNN的作用相當有限,但是它為我們提供了一個圖結構層變換和堆疊的基本思路.
針對上面最簡單GNN的不足,我們可以在其中根據連通性增加更加復雜的變換從而引入整個圖結構的信息,我們將這個過程稱之為信息傳遞.
信息傳遞包含三個步驟:
這個過程有點類似於卷積操作,每個節點匯聚了其鄰居的節點,經過多個層的變換,它將涵蓋全圖的信息.
於是我們可以將這個節點信息傳遞應用到上述的圖變換過程中:
然後,我們發現它並沒用用上邊的信息,於是可以把邊信息也加上,變成這樣:
既然把邊的信息加上了,那怎麼可以漏掉全局信息呢,於是完整的信息傳遞就可以表示成這樣:
以上,我們梳理了最簡單的GNNs是怎麼完成的,你應該已經對GNN有了一個基本的了解,就像學會了傳統神經網路中最簡單的全連接網路類似,關於GNN還有更多不同種類的更復雜的圖需要取了解和學習,但你只要掌握了以上的思想,學習起來也是十分容易的.
⑼ Google 的神經網路生成圖像 是怎麼做到的
我們要是知道怎麼做到的,我們就是谷歌的專家了。
⑽ Google 的神經網路生成圖像 是怎麼做到的
這是谷歌商業秘密,谷歌擁有其研發所有權,受美利堅信息技術版權保護Google 的神經網路生成圖像 是怎麼做到的