神经网络burgers方程讲解,神经网络不收敛的表现
1、為什么Matlab訓練神經網絡用不了GPU
可以用gpu加速訓練,可以通過增加'useGPU'字段:train(net,P,T,'useGPU','yes');或先將數據集P,T通過函數Pgpu=gpuArray(P);Tgpu=gpuArray(T);轉移到gpu內存中,再調用訓練函數train(net,Pgpu,Tgpu)但是需要注意以下幾點:
1,由于要在gpu上訓練,網絡的權重調整也會在gpu內進行,所以會占用gpu的內存,內存占用率與數據集的大小相關,可以通過下面的代碼了解內存占用:
gpudev=gpuDevice;%事先聲明gpudev變量為gpu設備類
%其他代碼
gpudev.AvailableMemory%實時獲得當前gpu的可用內存
可以通過嘗試不同的數據集大小選擇一個合適的數據集大小
2,大部分gpu處理double類型的數據能力并不強,所以如果想要取得較好的訓練效果,需要使用single數據類型的數據集,例:
P=single(P);%將double型的P轉為single型
T=single(T);%將double型的T轉為single型
train(net,P,T,'useGPU','yes');
但是matlab的神經網絡工具箱的一個函數可能有bug,在gpu上運行double變量的數據集時沒有問題,但運行single變量時可能會彈出如下錯誤:
Error using gpuArray/arrayfun
Variable xx changed type.
修復該問題需要在源文件上作一些修改,具體內容這里沒法三言兩語說清楚,如果遇到該問題可以留言
經過本人測試,single型的數據集在gpu上可以取得數十倍的加速,具體加速情況與具體gpu型號有關
谷歌人工智能寫作項目:小發貓
2、新手用matlab2010b編寫bp神經網絡出現了問題求指教
matlab 從2008版開始就對代碼的語法結構進行了很大的改動神經網絡bug。在2010版本里面已經不再主張使用這種初始化神經網絡的方法了。
簡單的做法是net = newff(Input, Target, StructuralArray, TrasnferFcns);
你上面的這個代碼改成這樣
net_1 = newff(P, T, [10, 5], {'tansig' 'purelin' 'purelin'}, 'traingdm')
其中,transfer function要比你的隱層數量多一個,因為輸出層的節點數量是不能設置的,這個是根據你前面給的T來確定的。最后一個'purelin'就是你輸出層的transfer function。
另外,我不知道你這個神經網絡是要做什么用的,通常這樣設置transfer function是很危險的。這樣設置transfer function會讓結果非常不穩定,雖然收斂的速度會變快。你在做外推或者內插的時候,誤差會非常大。所以通常使用的都是log sigmoid函數放在中間。畢竟你前面已經給出了一個mapminmax(),所以我認為你已經做完歸一化了。那么使用log sigmoid函數比使用tangent sigmoid函數要有一點優勢。不過這個根據你自己的需要來,我只是說通常不這樣做而已。
后面的代碼粗略的看了一下,如果有bug自己不能修復再回復我或者發新帖子吧。
3、你覺得計算機會算錯嗎?你見到過人工智能犯錯嗎?
計算機和人工智能當然有可能犯錯,而且一旦犯錯,往往會導致巨大的危險。
假如一輛自動駕駛的汽車,把迎面而來的白色卡車認錯成一朵白色的云,那么后果不堪設想。要避免這樣的悲劇發生,人工智能領域的研究人員必須非常對于日常中最常見的意外有深度的認識,這樣的話,機器才可以變得更加聰明。這也正是谷歌在做的事——同時研究人腦和神經網絡。到現在為止,神經網絡的意義在于人眼不會認錯的地方,機器也不會認錯。
自從20年前深藍(Deep?Blue)在國際象棋中擊敗卡斯帕羅夫(Garry?Kasparov),該事件就被人們譽為機器智能最權威的證明。谷歌的AlphaGo已經在圍棋比賽中以四勝一負贏得了韓國棋手李世石,更表明了這些年來人工智能的迅猛進步。機器終會比人類更聰明的預言即將到來,但我們似乎并沒有真正理解這個具有劃時代意義的事件的影響。?事實上,我們執著于對人工智能的一些嚴重的、甚至是危險的誤解。
很難知道該相信什么。但借助于計算科學家,神經科學家,和人工智能理論家的創舉,我們可以逐漸了解關于人工智能更清晰的圖景。下面是關于人工智能最常見的誤解和虛傳。
一、人工智能由于其極高智能,將不會犯任何錯誤。
Surfing?Samurai機器人人工智能研究者和開發者,Richard?Loosemore認為大多數假設的人工智能將毀滅世界的情景都非常不符合邏輯。大多數類似的假設總是認為人工智能將會說:“我知道毀滅人類文明是由于設計引起的故障,但無論如何我還是很想去做。”Loosemore指出如果人工智能在打算毀滅人類時,其思路是如此自相矛盾的話,它將在其一生中面臨無數自相矛盾的邏輯推理,也因此會干擾了其認知從而變得非常愚蠢,而同時根本不足以對我們造成傷害。他同時也斷言,那些認為“人工智能只會做程序設定的任務”的人,將會像在電腦剛剛發明時那些說電腦將永遠不會具備應變能力的謬論的人一樣。
二、我們永遠不會創造出類似人類智慧的人工智能
我們已經在一些游戲領域,如象棋與圍棋、股市交易和談話等創造出可以與人類智慧匹敵、甚至超過人類的計算機。?而背后驅動的計算機和算法只會越來越好;因此,計算機趕超其他人類活動,將只是個時間問題。
當懷疑論者說這是一個無法解決的技術問題,或是生物大腦有一些內在的獨特之處時,是不能令人信服的。我們的大腦是生物機器,但歸根到底它們仍然是機器;他們在現實世界中存在,按照物理學的基本規律運行。沒有什么是不可知的。
三、人工智能將有自覺意識
關于機器智能的一個共同的假設是,它是自覺的有意識的,也就是說,它會像人類一樣思考。我們完全可以想象一個非常聰明的機器,缺乏一個或多個這種屬性。最后,我們可以建立一個非常聰明的,但沒有自我意識的,不能主觀或有意識地體驗世界的人工智能。
只是因為一臺機器通過圖靈測試從而證實計算機和人類在智能上無區別,并不意味著它是有意識的。對我們來說,先進的人工智能可能會導致機器看起來是意識的假象,但是在自我自覺方面,它并不比一塊巖石或計算器更能感知自我意識。
四、我們不應該害怕人工智能。
一個高度智慧的系統也許能了解完成一個特定任務所需要的所有知識,例如解決一個讓人頭痛的財務問題,或者侵入一個敵人的系統。但除開這些它所專長的特定的領域外,它很可能非常無知和愚昧。
五、一個簡單的修補程序將解決人工智能的控制問題。
假設我們創造出強于人類的人工智能,我們將要面對一個嚴重的“控制問題”。未來主義者和人工智能理論家完全不知如何限制和制約一個ASI(超強人工智能),一旦它被創造出來,也不知道如何保證它將對人類友好。最近,佐治亞理工的研究人員天真地認為人工智能可以通過閱讀簡單的故事和社會習俗來學習人類價值觀。而問題很可能會遠遠比這復雜。
所以,理論上,如果不停挑戰AI所不擅長的復雜選點棋局,是有可能發現AI的問題,引起過擬合現象的。就像前面提到的,李世石對戰AI第四盤棋中的“神之一手”。不是因為這一手夠正確,而是因為這一手夠怪。
簡單來說,你只要不停走AI沒見過的棋局變化,是有可能引起AI出“bug”的。哪怕是在現在很成熟的AI系統上,過擬合的風險。以人臉識別為例,只需要你在腦門上張貼類似于人臉其他器官紋理的貼紙,就能輕易讓AI錯亂。
AI確實征服了很多難題,但現在的AI也絕非完美。需要我們去了解其原理,并將其優勢為我所用。就像現在的圍棋棋手們,未選擇用“怪棋”挑戰AI的極限,而選擇了和AI共同進步學習那樣。這才是我們和AI的相處之道。
4、機械編程還能自己檢測出BUG,機械編程帶來了哪些好處?
首先,ControlFlag是完全自我監督的機器編程系統,不需要人類對其進行訓練及指導。ControlFlag的無監督模式識別方法使它可以在本質上學習適應開發者的風格。在要評估的控制工具的有限輸入信息中,ControlFlag可以識別編程語言中的各種樣式,不受代碼使用的編程語言限制。
第二,ControlFlag檢測bug的功能集成了機器學習、形式化方法、編程語言、編譯器和計算機系統。據悉,ControlFlag通過一個稱為異常檢測的功能來進行bug檢測,通過學習經驗證的例子來檢測正常的編程模式,并找出代碼中可能導致bug的異常。該工具將學會識別和標記這些風格選擇,并根據其見解進行自動的錯誤識別和建議解決方案,以便ControlFlag能夠盡可能地避免將兩個開發團隊之間的風格差異視為代碼錯誤。
自動檢測bug的系統好不好用?英特爾已經開始評估內部使用ControlFlag來發現自己的軟件和固件產品化中的錯誤。這是英特爾開發人員快速分析項目的一個關鍵組成部分,該項目旨在通過提供專家支持來幫助程序員加快速度。
機器編程更偏向隨機
英特爾機器編程研究系統ControlFlag從超過十億行的代碼中學習,英特爾研究院機器編程研究表示,這在機器編程系統中尚屬首次。另外,對于跨架構硬件來說,能夠正確、高效、安全地編寫代碼的程序員稀少,從而導致代碼中存在難以發現的新錯誤。而ControlFlag檢測現有軟件中的違規或異常情況,使可能已經在生產質量系統中存在了20多年的隱疾得以發現。過去可能有數百名開發人員查看過這些代碼,但都沒有意識到任何問題,現在ControlFlag可以實現人力不能達到的效果。
英特爾研究院機器編程研究融合了兩種方法,來推動大量的機器編程研究,一種是形式化方法,一種是隨機方法(stochastic approaches)。英特爾研究院機器編程研究分析目前業界在機器編程領域方面的工作發現,機器編程更偏向隨機方法,并得到了很大的重視,例如深度神經網絡和貝葉斯網絡(Bayesian networks)等等。事實上,英特爾研究院機器編程研究表示,他們的某些合作伙伴或競爭對手正在做神經網絡編程,使用神經網絡來替換大量代碼。這樣做有好處,但是當遇到諸如可解釋性或debug問題時,這樣做也有風險。
在正確的應用場景,機器編程對開發效率的提升驚人。Justin表示,在某個案例中,用傳統的軟件技術,開發完成大約需要三年時間,有了先進的機器編程技術,只需要花一天的時間,就能開發完成同樣質量的軟件。“很多例子表明,不管是與我們的合作伙伴項目,還是我們自己內部的開發項目,機器編程都將生產率提高了一千倍以上。”
降低行業準入門檻,從業者創造性會更強
機器編程發展是否會讓英特爾的程序員失業呢?Justin表示:不會。相反,機器編程實際上會創造數千萬到數億個就業機會。他進一步解釋到:首先,當今存在的大多數機器編程系統都需要大量的數據,這些數據通常是以代碼的形式存在,而代碼是由專業程序員編寫。因此,隨著自動化的發展,英特爾研究院機器編程研究對高技能程序員的需求增加,以推進系統的進步升級。最重要的是,如果英特爾研究院機器編程研究的意圖系統成功,即允許用戶向機器表達他或她的意圖的系統,這將降低行業準入門檻。
機器編程會為全新類型的程序員創造大平臺,從業者創造性會更強,而機器和系統會把這些想法綜合起來做出軟件。如今,通過ControlFlag和類似的系統,程序員可以顯著減少調試時間,并將更多的時間花在人類程序員最擅長的工作——向機器呈現創造性的新思想。完全實現的ControlFlag可以通過自動化繁瑣的軟件開發工作(如測試、監控和調試)來幫助緩解上述挑戰,同時可以解決當前軟件開發中耗時費力代價昂貴的bug修復問題。
圖:在全球78億人中,只有2700萬人會編寫代碼,占比不到 1%。英特爾希望借助機器編程技術,使所有人獲得編程能力。
英特爾推進機器編程的最終目標是讓每個人都能創建軟件。當這一目標完全實現時,每個人都可以通過自己最擅長的方式,如代碼、自然語言或其他方式向機器表達自己的設計意圖,從而創建軟件。這是一個大膽的目標,需要英特爾及合作伙伴付出許多努力。
做理性自由的破題者
算法與算力的進步,以及可用代碼庫的極大豐富,讓機器編程擁有適宜的孕育環境;隨著近年計算技術的迅猛發展,機器編程迎來重要拐點。英特爾一直以來的作風便是積極打破傳統,開拓新的研究或工程領域,這些領域在英特爾研究院機器編程研究突破界限之前還無人涉及。此次異構系統領域亦是一片“處女地”,英特爾的創新驅動力來自于對這一未來技術趨勢的預測。
圖:英特爾與麻省理工學院研究人員聯合發表的愿景論文提出機器編程有三大支柱,分別是意圖(intention)、創造(invention)、適應(adaptation)
如前所述,異構系統非常復雜,能夠切實掌握異構系統編程技術的工程師少之又少,英特爾研究院機器編程研究正在開發某種機制,讓程序員或非程序員不僅能夠輕松訪問異構硬件,還能充分使用其他系統可用資源,以大幅降低異構編程難度。這也是英特爾機器編程的基本驅動力之一。
5、神經網絡程序如何生成simulink模塊
你可以先生成net網絡,經訓練后即可調用gensim函數。我給你看一個例子吧:
%訓練樣本集
%輸入向量
P=[756.5745 765.3261 762.9077 762.7337 778.0583 768.4183 753.3221 754.777 869.1892 837.8081 850.121 871.7502 886.9313 896.7662 844.2693 878.671 936.677 953.5296 936.9523 972.7305 969.6961 966.8402 967.3992 991.9504;
20 20 20 20 45 45 45 45 20 20 20 20 45 45 45 45 20 20 20 20 45 45 45 45];
%目標向量
T=[750 750 750 750 750 750 750 750 850 850 850 850 850 850 850 850 950 950 950 950 950 950 950 950];
%輸入向量、目標向量歸一化
p=(P-[750;20]*ones(1,24))./([950;45]*ones(1,24)-[750;20]*ones(1,24));
t=(T-750)/(950-750);
%創建BP網絡:網絡含5個隱層和一個輸出層
net=newff([0,1;0,1],[5,1],{'tansig','logsig'},'trainlm');
%對網絡進行訓練
net=train(net,p,t);
%保存網絡
save cellnet net
%生成模塊
gensim(net,-1)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
首先需要指出的是,newff函數是用來產生新的網絡的,使用時輸入向量的維數可以是任意的。
下面是我寫的幾行命令,newff命令中的minmax(X)決定了新生成網絡的輸入為5維
%輸入向量
X=[0 0.5398 0.5325 0.5324;
0 -0.9341 0.9339 -0.9327;
0 -6.4617 0.8567 0.8850;
0 10.3576 -10.1934 8.9586;
0 10.9531 31.1317 51.2697];
%目標向量
T=[0 10.9630 31.1417 51.2796];
%輸入向量、目標向量歸一化:你自己補充一下
%創建BP網絡:假設網絡含5個隱層和一個輸出層
net=newff(minmax(X),[5,1],{'tansig','logsig'},'trainlm');
%對網絡進行訓練
net=train(net,X,T);
%生成模塊
gensim(net,-1)
%需要指出的是,上面調用的newff函數的用法是基于MATLABR2007或者早些版本的。MATLABR2008a上調用時會稍微有所不同。你可以用help看看
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
輸入輸出都是按行歸一化的。每一個輸入矩陣中,每一列都是一個訓練或測試樣本,對列輸入沒有意義的。
我用的是MATLABR2008版的,你的那段程序在語法上除了歸一化不正確導致的一些問題和newff調用警告外好像沒有其他的bug
6、誰能告訴我“bug brain”這個游戲怎么玩?
BugBrain是一個讓你構造神經網絡來指揮一只蟲子活動的游戲,但其神經網絡編輯和模擬功能卻相當直觀,相當強大。最開始可以構造進行初級邏輯判斷、具有簡單記憶能力的網絡,然后用復雜的神經網絡指揮蟲子在復雜環境中覓食求生,最終甚至可以試著構建具有學習能力的神經網絡,并教會它識別手寫字母!用來入門了解神經網絡實在是太合適不過了。
這是編輯神經網絡的界面,黃色的線就是神經元之間的連接,綠色的點點就是神經元,黃色點點是節點,紅色的點點是感覺輸入端,藍色的點點是行為輸出端。
總結
以上是生活随笔為你收集整理的神经网络burgers方程讲解,神经网络不收敛的表现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小微企业、个体工商户看过来,国家扶持来了
- 下一篇: ICC2:限制LVT比例