❶ 地震去噪新探索(二)——無監督卷積神經網路調優實戰
「心中有歌,到處都是舞台」。
自從投入了自編碼的深度學習研究後,一路走來就是磕磕碰碰。
上一篇將地震信號用在了自編碼卷積神經網路降噪(見《地震去噪新探索——無監督卷積神經網路實戰》),結果那叫一個慘。如下面的圖示,上邊是雜訊圖,下邊是去噪圖:
從去噪效果來看,僅能獲取到一些支離破碎的有效信號,這是一張完全拿不出手的效果圖。
卷積神經網路不是更能學習到特徵細節,性能更好嗎?為啥我做出來的效果如此之慘?
前期的參數設置包括:使用10000個28*28的訓練小塊,訓練epoch:5,學習率:0.001,優化器:tf.train.AdamOptimizer(learn).minimize(cost),LOSS函數:tf.nn.sigmoid_cross_entropy_with_logits(labels=targets_, logits=logits_),cost = tf.rece_mean(loss)
網路結構圖為:
訓練損失曲線:
1.歸一化的優化
慘不忍睹的LOSS訓練結果引起了我的注意。將收斂失敗這個問題拿到網上去尋找答案,有大神說這是歸一化沒做好。
那就先進行2項優化:
一是控制訓練樣本的取值范圍到(-1,1),使用方法是原值除以最大值的方法,就像這樣:
noisy_imgs=noisy_imgs/abs(noisy_imgs).max()
二是在訓練網路的每個卷積後增加BN,就像這樣:
conv1 = tf.layers.conv2d(inputs_, 64, (3,3), padding='same', activation=tf.nn.relu)
conv1 = tf.layers.batch_normalization(conv1, training=True)
再進行訓練,效果不明顯,還是沒有收斂。
另外,很多歸一化的方法是將取值范圍集中在(0,1),使用這樣的演算法:
imgs= (imgs-imgs.min())/(imgs.max()-imgs.min())#歸一化到[0,1]
結果證明對於地震數據完全沒法訓練,曲線是這樣的:
2.學習函數的調整
「一計不成,再生一計」。
我想到了對優化器和LOSS函數進行改動。
在神經網路學習中,損失函數的作用是度量神經網路的輸出的預測值,計算與實際值之間的差距,可以說是實現學習的關鍵函數。常見的損失函數包括:最小二乘損失函數、交叉熵損失函數、回歸中使用的smooth L1損失函數等。
而優化函數的原理是:把損失值從神經網路的最外層傳遞到最前面,實現反向傳播學習,這是神經網路實現持續學習達到收斂的關鍵。如最基礎的梯度下降演算法包括:隨機梯度下降演算法,批量梯度下降演算法,帶動量的梯度下降演算法,Adagrad,Adadelta,Adam等。
那我就先從優化器函數入手吧。
既然學習率為0.001無法收斂,那試試0.0001呢。結果還真收斂了,如下圖:
那預測效果如何呢?結果是一塌糊塗,連基本特徵都學習不到,如下圖:
這是怎麼回事呢?我的理解是學習率太高,就會讓神經網路學習到更細粒度的特徵,而失去了我們想要的特徵。就相當於研究一個人的特徵,我們通常是從五官、體型等方面來看,但如果從細胞的角度的去學習,那就無法還原人的外貌特徵了。
另外,設置為0.0005也好不了多少。
那改動LOSS函數能不能起作用呢?
比如改為softmax_cross_entropy_with_logits,像這樣:
loss = tf.nn.softmax_cross_entropy_with_logits(labels=targets_, logits=logits_)
結果是無法學習,如下圖:
3.其它的嘗試
兩板斧過去,還沒有看到變好的跡象。我沒有放棄,我開始思考為啥原程序訓練Mnist效果都如此好,換到地震數據訓練就不行了呢?
我想到了訓練樣本數據是不是有問題。我又進行了以下嘗試:
一是調整訓練樣本數據的尺寸:有128*128,40*40,32*32,28*28等。
二是對樣本數據進行截斷:地震數據不是異常值多,偏離度大嗎。我就篩選數據集中的90%區間,區間外面的進行截斷,再進行歸一化。這樣數據分布就均勻多了。
三是擴充采樣數據來源,從不同的數據源采樣。是不是數據更豐富,訓練效果就會改觀呢?
……
你可以想像做這些實驗有多麼瑣碎和繁雜,然而現實卻是如此的無情。最後結局都是一個——失敗,根本拿不出一個像樣的效果,連一個較為清晰的結果都沒有。
「山窮水復疑無路,柳暗花明又一村」。
在持續N天被現實按在地上摩擦後,我痛定思痛:到底解決的方向在哪裡?
在現有這個無可救葯的神經網路中,提高學習率可以收斂,但是無法學習到有效特徵。降低學習率可以學習到有效特徵但是無法收斂,也就是說無法持續優化的學習。整個成了一個悖論。
面對這張醜陋的預測結果圖,我意識到可能是網路結構本身出了問題。很有可能是網路對圖片數據學習有效,對地震數據學習就是不行。
在翻閱了其它研究者的論文後,我逐步聚焦到了一個結構——解碼。我的程序在這部分是使用卷積核上采樣的結構。像這樣:
conv4 = tf.image.resize_nearest_neighbor(conv3, (8,8))
conv4 = tf.layers.conv2d(conv4, 32, (3,3), padding='same', activation=tf.nn.relu)
而其它地震論文結構卻包含了一個我沒有的結構——反卷積。
如果我也使用反卷積,甚至就只有卷積和反卷積這種最簡單的自編碼結構,效果如何呢?像這樣的結構:
x = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)
x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
x = Conv2DTranspose(32, (3,3), padding='same', activation='relu', kernel_initializer='glorot_normal')(x)#反卷積
x = Conv2DTranspose(32, (3,3), padding='same', activation='relu', kernel_initializer='glorot_normal')(x)
decoded = Conv2DTranspose(1, (1,1), padding='same', activation='tanh', kernel_initializer='glorot_normal')(x)
結果是令人驚艷的。下圖是收斂的效果,很快就能夠收斂:
訓練的效果更好。以下分別是原圖,雜訊圖和去噪效果圖:
可以看到,上面雜訊幾乎淹沒了有效信號。然後通過訓練,僅僅5個迭代,就較好的分離出了有效信號。
「既然選擇了遠方 便只顧風雨兼程」。
看來反卷積是是解決地震學習的一把鑰匙。下一步我將研究反卷積能適應地震處理的原因,然後繼續進行優化和創新,並使用其它演算法做對比實驗,爭取做出更好的效果。
如果喜歡請點「贊」,如果小夥伴對程序感興趣,可以聯系我獲取。
❷ 深度置信網路存在哪些問題,如何解決
深度置信網路(Deep Belief Network)
DBNs是一個概率生成模型,與傳統的判別模型的神經網路相對,生成模型是建立一個觀察數據和標簽之間的聯合分布,對P(Observation|Label)和 P(Label|Observation)都做了評估,而判別模型僅僅而已評估了後者,也就是P(Label|Observation)。
DBNs由多個限制玻爾茲曼機(Restricted Boltzmann Machines)層組成,一個典型的神經網路類型如圖所示。這些網路被「限制」為一個可視層和一個隱層,層間存在連接,但層內的單元間不存在連接。隱層單元被訓練去捕捉在可視層表現出來的高階數據的相關性。
DBNs的靈活性使得它的拓展比較容易。一個拓展就是卷積DBNs(Convolutional Deep Belief Networks(CDBNs))。DBNs並沒有考慮到圖像的2維結構信息,因為輸入是簡單的從一個圖像矩陣一維向量化的。而CDBNs就是考慮到了這個問題,它利用鄰域像素的空域關系,通過一個稱為卷積RBMs的模型區達到生成模型的變換不變性,而且可以容易得變換到高維圖像。DBNs並沒有明確地處理對觀察變數的時間聯系的學習上,雖然目前已經有這方面的研究,例如堆疊時間RBMs,以此為推廣,有序列學習的bbed temporalconvolutionmachines,這種序列學習的應用,給語音信號處理問題帶來了一個讓人激動的未來研究方向。
目前,和DBNs有關的研究包括堆疊自動編碼器,它是通過用堆疊自動編碼器來替換傳統DBNs裡面的RBMs。這就使得可以通過同樣的規則來訓練產生深度多層神經網路架構,但它缺少層的參數化的嚴格要求。與DBNs不同,自動編碼器使用判別模型,這樣這個結構就很難采樣輸入采樣空間,這就使得網路更難捕捉它的內部表達。但是,降噪自動編碼器卻能很好的避免這個問題,並且比傳統的DBNs更優。它通過在訓練過程添加隨機的污染並堆疊產生場泛化性能。訓練單一的降噪自動編碼器的過程和RBMs訓練生成模型的過程一樣。
❸ matlab中使用神經網路工具箱最後得到的結果不顯示在命令窗口,怎麼回事呢
需要顯示的結果不要使用分號;
例如
>>b=3+4
ans=7
>>b=3+4;
則不顯示。
另外,mat文件是MATLAB用於存儲數據的專用文件格式,需要的時候可以採用inport命令導入到MATLAB中。
❹ matlab神經網路工具箱怎麼效果好
導入數據:選擇合適的數據,一定要選數值矩陣形式
在這里插入圖片描述在這里插入圖片描述
進行訓練
在這里插入圖片描述
接下來就點next,選擇輸入輸出,Sample are是選擇以行還是列放置矩陣的,注意調整
在這里插入圖片描述
接下來一直next,在這兒點train
在這里插入圖片描述
查看結果
在這里插入圖片描述
導出代碼:再點next,直到這個界面,先勾選下面的,再點Simple Script生成代碼
在這里插入圖片描述
使用訓練好的神經網路進行預測
使用下方命令,z是需要預測的輸入變數,net就是訓練好的模型
在這里插入圖片描述
再將結果輸出成excel就行啦
在這里插入圖片描述
打開CSDN,閱讀體驗更佳
使用MATLAB載入訓練好的caffe模型進行識別分類_IT遠征軍的博客-CSDN...
在進行下面的實驗前,需要先對數據進行訓練得到caffemodel,然後再進行分類識別 c_demo.m function [scores, maxlabel] = c_demo(im, use_gpu) % Add caffe/matlab to you Matlab search PATH to use matcaffe if exist('/home/...
繼續訪問
MATLAB調用訓練好的KERAS模型_LzQuarter的博客
下載了鏈接中的「kerasimporter.mlpkginstall」文件後,在matlab內用左側的文件管理系統打開會進入一個頁面,在該頁面的右上角有安裝的按鈕,如果之前安裝一直失敗,可以通過這個安裝按鈕的下拉選項選擇僅下載 下載還是有可能要用到VPN,但是相比...
繼續訪問
最新發布 matlab神經網路預測數據,matlab神經網路工具箱
Matlab語言是MathWorks公司推出的一套高性能計算機編程語言,集數學計算、圖形顯示、語言設計於一體,其強大的擴展功能為用戶提供了廣闊的應用空問。它附帶有30多個工具箱,神經網路工具箱就是其中之一。谷歌人工智慧寫作項目:神經網路偽原創。
繼續訪問
matlab神經網路工具箱系統預測
matlab神經網路工具箱系統預測 有原始數據 根據原始數據預測未來十年內的數據
matlab預測控制工具箱
matlab預測控制工具箱,在學習預測控制的過程中翻譯的matlab自帶的示例,希望對大家有所幫助 matlab預測控制工具箱,在學習預測控制的過程中翻譯的matlab自帶的示例,希望對大家有所幫助
用matlab做bp神經網路預測,神經網路預測matlab代碼
我覺得一個很大的原因是你預測給的輸入范圍(2014-)超出了訓練數據的輸入范圍(2006-2013),神經網路好像是具有內插值特性,不能超出,你可以把輸入變數-時間換成其他的變數,比如經過理論分析得出的某些影響因素,然後訓練數據要包括大范圍的情況,這樣可以保證預測其他年份的運量的時候,輸入變數不超出范圍,最後預測的時候給出這幾個影響因素的值,效果會好一點。輸出層是個purelin,線性組合後的輸出層輸出當然也全是幾乎相同的了。輸出層是個purelin,線性組合後的輸出層輸出當然也全是幾乎相同的了。
繼續訪問
BP神經網路預測實例(matlab代碼,神經網路工具箱)
目錄辛烷值的預測matlab代碼實現工具箱實現 參考學習b站: 數學建模學習交流 bp神經網路預測matlab代碼實現過程 辛烷值的預測 【改編】辛烷值是汽油最重要的品質指標,傳統的實驗室檢測方法存在樣品用量大,測試周期長和費用高等問題,不適用於生產控制,特別是在線測試。近年發展起來的近紅外光譜分析方法(NIR),作為一種快速分析方法,已廣泛應用於農業、制葯、生物化工、石油產品等領域。其優越性是無損檢測、低成本、無污染,能在線分析,更適合於生產和控制的需要。實驗採集得到50組汽油樣品(辛烷值已通過其他方法測
繼續訪問
用matlab做bp神經網路預測,matlab人工神經網路預測
ylabel('函數輸出','fontsize',12);%畫出預測結果誤差圖figureplot(error,'-*')title('BP網路預測誤差','fontsize',12)ylabel('誤差','fontsize',12)xlabel('樣本','fontsize',12)。三、訓練函數與學習函數的區別函數的輸出是權值和閾值的增量,訓練函數的輸出是訓練好的網路和訓練記錄,在訓練過程中訓練函數不斷調用學習函數修正權值和閾值,通過檢測設定的訓練步數或性能函數計算出的誤差小於設定誤差,來結束訓練。.
繼續訪問
matlab訓練神經網路模型並導入simulink詳細步驟
之前的神經網路相關文章: Matlab-RBF神經網路擬合數據 Matlab RBF神經網路及其實例 4.深度學習(1) --神經網路編程入門 本文介紹一下怎麼把訓練好的神經網路導入到simulink並使用,假定有兩個變數,一個輸出變數,隨機生成一點數據 x1 = rand(1000,1);x2 = rand(1000,1);x = [x1 x2];y = rand(1000,1); 在App裡面找到神經網路工具箱 點擊Next 選擇對應的數據,注意選擇好對應的輸入和輸出,還
繼續訪問
用matlab做bp神經網路預測,matlab神經網路怎麼預測
它的學習規則是使用最速下降法,通過反向傳播來不斷調整網路的權值和閾值,使網路的誤差平方和最小。Network可以看出,你的網路結構是兩個隱含層,2-3-1-1結構的網路,演算法是traindm,顯示出來的誤差變化為均方誤差值mse。達到設定的網路精度0.001的時候,誤差下降梯度為0.0046,遠大於默認的1e-5,說明此時的網路誤差仍在快速下降,所以可以把訓練精度目標再提高一些,比如設為0.0001或者1e-5。如果你所選用的激活函數是線性函數,那麼就可以先把輸出的表達式寫出來,即權向量和輸入的矩陣乘積。
繼續訪問
matlab訓練模型、導出模型及VC調用模型過程詳解
MATLAB是美國MathWorks公司出品的商業數學軟體,為演算法開發、數據可視化、數據分析以及數值計算等提供了高級計算語言和互動式環境。隨著人工智慧的崛起,MATLAB也添加了自己的機器學習工具包,只需要很少的代碼或命令就能完成模型訓練和測試的過程,訓練好的模型也能方便的導出,供VC等調用。本文主要介紹模型訓練、導出和調用的整個過程。 軟體版本: VC2015,matlab2018a ...
繼續訪問
matlab神經網路預測模型,matlab人工神經網路預測
谷歌人工智慧寫作項目:小發貓matlab帶有神經網路工具箱,可直接調用,建議找本書看看,或者MATLAB論壇找例子常見的神經網路結構。核心調用語句如下:%數據輸入%選連樣本輸入輸出數據歸一化[inputn,inputps]=mapminmax(input_train);[outputn,outputps]=mapminmax(output_train);%%BP網路訓練%%初始化網路結構net=newff(inputn,outputn,[88]);net.trainParam.epochs=100;=0.0
繼續訪問
在Matlab中調用pytorch上訓練好的網路模型
在Matlab中調用pytorch上訓練好的網路模型
繼續訪問
MATLAB_第二篇神經網路學習_BP神經網路
BP神經網路代碼實現1. BP神經網路的簡介和結構參數1.1 BP神經網路的結構組成1.2 BP神經網路訓練界面的參數解讀 非常感謝博主wishes61的分享. 1. BP神經網路的簡介和結構參數 一種按照誤差逆向傳播演算法訓練的多層前饋神經網路用於預測BP神經網路的計算過程:由正向計算過程和反向計算過程組成。 正向傳播過程,輸入模式從輸入層經隱單元層逐層處理,並轉向輸出層,每一層神經元的狀態隻影響下一層神經元的狀態。 如果在輸出層不能得到期望的輸出,則轉入反向傳播,將誤差信號沿原來的連接通路返回,通過修改各
繼續訪問
MATLAB神經網路擬合回歸工具箱Neural Net Fitting的使用方法
本文介紹MATLAB軟體中神經網路擬合(Neural Net Fitting)工具箱的具體使用方法~
繼續訪問
灰色預測工具箱matlab,Matlab灰色預測工具箱——走過數模
2009-07-02 23:05灰色預測幾乎是每年數模培訓必不可少的內容,相對來說也是比較簡單,這里寫了四個函數,方便在Matlab裡面調用,分別是GM(1,1),殘差GM(1,1),新陳代謝GM(1,1),Verhust自己寫得難免有所疏忽,需要的朋友自己找本書本來試驗一下。。Gm(1,1)function [px0,ab,rel]=gm11(x0,number)%[px0,ab,rel]=gm...
繼續訪問
matlab利用訓練好的BP神經網路來預測新數據(先保存網路,再使用網路)
1,保存網路。save ('net') % net為已訓練好的網路,這里把他從workspace保存到工作目錄,顯示為net.mat文檔。 2,使用網路。load ('net') % net為上面保存的網路,這里把他下載到workspace。y_predict = sim(...
繼續訪問
數學建模學習(79):Matlab神經網路工具箱使用,實現多輸入多輸出預測
Matlab神經網路工具箱實現,實現多輸入多輸出預測
繼續訪問
熱門推薦 如何利用matlab做BP神經網路分析(包括利用matlab神經網路工具箱)
利用MATLAB 進行BP神經網路的預測(含有神經網路工具箱) 最近一段時間在研究如何利用預測其銷量個數,在網上搜索了一下,發現了很多模型來預測,比如利用回歸模型、時間序列模型,GM(1,1)模型,可是自己在結合實際的工作內容,發現這幾種模型預測的精度不是很高,於是再在網上進行搜索,發現神經網路模型可以來預測,並且有很多是結合時間序列或者SVM(支持向量機)等組合模型來進...
繼續訪問
bp神經網路預測案例python_詳細BP神經網路預測演算法及實現過程實例
1.具體應用實例。根據表2,預測序號15的跳高成績。表2國內男子跳高運動員各項素質指標序號跳高成績()30行進跑(s)立定三級跳遠()助跑摸高()助跑4—6步跳高()負重深蹲杠鈴()杠鈴半蹲系數100(s)抓舉()12.243.29.63.452.151402.811.05022.333.210.33.752.21203.410.97032.243.09.03.52.21403.511.4504...
繼續訪問
如何調用MATLAB訓練神經網路生成的網路進行預測
如何調用MATLAB訓練神經網路生成的網路問題引出知識准備代碼註解 問題引出 如何存儲和調用已經訓練好的神經網路。 本人前幾天在智能控制學習的過程中也遇到了這樣的問題,在論壇中看了大家的回復,雖然都提到了關鍵的兩個函數「save」和「load」,但或多或少都簡潔了些,讓人摸不著頭腦(呵呵,當然也可能是本人太菜)。通過不斷調試,大致弄明白這兩個函數對神經網路的存儲。下面附上實例給大家做個說明,希望對跟我有一樣問題的朋友有所幫助。 知識准備 如果只是需要在工作目錄下保到當前訓練好的網路,可以在命令窗口 輸入:s
繼續訪問
matlab訓練好的模型怎麼用
神經網路