Ⅰ 神經網路輸出層採用非線性函數和線性函數,有區別嘛
神經網路輸出層採用非線性函數和線性函數是有區別的。對於非線性問題應用非線性函數來處理,而對於線性問題應用線性函數處理,也可以用非線性函數處理。
Ⅱ Tensorflow系列3:多層神經網路--解決非線性問題
這里拿醫院的數據做一個簡單的線性分類任務,任務特徵是病人的年齡和腫瘤大小,任務目標是病人的腫瘤是良性的還是惡性的。
補充知識:
補充知識:
MSE 的公式為:
cross entropy 一般用於分類問題,表達的意思是樣本屬於某一類的概率,公式為:
這里用於計算的a也是經過分布統一化處理的(或者是經過Sigmoid函數激活的結果),取值范圍在0~1之間。
在tensorflow中常見的交叉熵函數有:Sgimoid交叉熵,softmax交叉熵,Sparse交叉熵,加權Sgimoid交叉熵
MSE的預測值和真實值要控制在同樣的數據分布內,假設預測值經過Sigmoid激活函數得到取值范圍時候0 1之間,那麼真實值也要歸一化成0 1之間。
在tensorflow中沒有單獨的MSE函數,可以自己組合:
MSE=tf.rece_mean(tf.square(logits-outputs))
softmax_cross_entropy_with_logits 函數,必須要自己定義,比如:
loss = tf.rece_mean(-tf.rece_sum(labels*tf.log(logits_scaled),1))
損失函數的選取取決於輸入標簽數據的類型:如果輸入是實數、無界的值,多使用MSE;如果輸入標簽是位矢量(分類標志),使用cross entropy比較合適
補充知識點:
reshape() 函數接受-1時,該行(列)數可以為任意值。[-1,1]代錶行數隨意,列數變成1。
模型生成的z用公式可以表示成z=x1w1+x2w2+b,如果將x1和x2映射到直角坐標系中的x和y坐標,那麼z就可以被分為小於0和大於0兩部分。當z=0時,就代表直線本身。
這次再在剛剛的二分類基礎上再增加一類,變成三類,可以使用多條直線將數據分成多類。
生成的X,Y的數據樣本如下內容:
常用的激活函數比如sigmoid,relu,tanh輸出值只有兩種,面對以上多分類問題,就需要使用softmax演算法。該演算法的主要應用就是多分類,而且是互斥的,即只能屬於某一類。(對於不是互斥的分類問題,一般使用多個二分類來組成)
補充知識:
也可以畫出更直觀的圖示:
例如:
對於線性不可分的數據樣本,可以使用多層神經網路來解決,也就是在輸入層和輸出層中間多加一些神經元,每一層可以加多個,也可以加多層。
在模型訓練過程中會出現欠擬合和過擬合的問題,欠擬合的原因並不是模型不行,而是我們的學習方法無法更精準地學習到適合的模型參數。模型越薄弱,對訓練的要求就越高,但是可以採用增加節點或者增加隱藏層的方式,讓模型具有更高的擬合性,從而降低模型的訓練難度。過擬合的表現在模型在訓練集上的表現非常好,loss很小;但是在測試集上的表現卻非常差。
避免過擬合的方法很多:常用的有early stopping、數據集擴增、正則化、dropout
本質就是加入雜訊,在計算loss時,在損失後面再加上意向,這樣預測結果與標簽間的誤差就會受到干擾,導致學習參數W和b無法按照目標方向來調整,從而實現模型與訓練數據無法完全擬合的效果,從而防止過擬合。
這個添加的干擾項必須具有如下特性:
這里有兩個范數L1和L2:
tf.rece_sum(tf.abs(w))
tf.nn.l2_loss(t,name=None)
拿上面的異或數據做舉例,dropout方法就是在剛剛的layer_1層後面再添加一個dropout層。
實際訓練時,將keep_prob設置成0.6,意味著每次訓練將僅允許0.6的節點參與學習運算。由於學習速度這樣就變慢了,可以將learning_rate調大,加快訓練速度。 注意:在測試時,需要將keep_prob設置為1。
全連接神經網路是一個通用的擬合數據的框架,只要有足夠多的神經元,及時只有一層hidden layer,利用常見的Sigmoid,relu等激活函數,就可以無限逼近任何連續函數。在實際使用中,如果想利用淺層神經網路擬合復雜非線性函數,就需要你靠增加的神經元個數來實現,神經元過多會造成參數過多,從而增加網路的學習難度,並影響網路的泛化能力。因此,在實際構建網路結構時,一般傾向於使用更深的模型,開減少所需要的神經元數量。
Ⅲ matlab中怎麼用 neural network建立一個感知器
第一:特點
1、監督網路包括:正反饋、徑向基、LVQ、時延、非線性自回歸(NARX)以及層遞歸的神經網路
2、非監督網路包括:自組織圖與競爭層結構;
3、通過預處理和後處理提高網路訓練與評估網路性能;
4、模塊化網路用以管理和可視化任何大小的網路;
5、用於構建和評估神經網路的Simulink模塊
第二:數據擬合、分類和模式識別
1、數據擬合
應用舉例:房價均值估計
問題描述:通過創建神經網路以估計社區房價的均值,該社區採用以下13個屬性進行描述
1)每城市的人均犯罪率
2)住宅用地的比例大於25000平方
3)每個城市的非零售商業用地比例
4)1表示Charles river的邊界,0則表示其他的
5)氮氧化合物濃度(1000萬分之1)
6)平均每個寓所的房間數量
7)業主單位是1940年以前的比例
8)距離波士頓就業中心的加權距離
9)徑向高速公路的可訪問性指數
10)每10,000美元全部價值財產稅稅率
11)城市中小學老師的比例
12)1000(Bk - 0.63)^2
13)地位較低的人口百分比
上述輸入是與目標輸出相關聯的。
數據准備
輸入矩陣X和目標輸出矩陣T
X中每一列都是由上述13個特徵屬性所表徵的數字所組成。該已知的13個數值表示當前已知的房價均值。T矩陣的每一列都會有一個元素,用以表示1000年後的房價均值
(the median house price in 1000's of dollars)
數據導入:
[x,t]=house_dataset;
可以看到X和T都是506列,表示的是506個社區的屬性,即所謂的輸入。這些輸入與房價均值相關聯,即目標。X有13行,即表示13個屬性;目標矩陣T只有1行。
用神經網路進行數據擬合
神經網路是用隨機權值進行初始化的,所以每次運行的結果會有稍微的不一樣。可以通過設置隨機化種子以避免這種隨機性。但是我們在應用過程中是不需要setdemorandstream(491218382)的。
一般越是復雜的問題,所需要設置的神經元數量越多,神經元層數也越多。在此,我們在隱含層設置的是10個神經元。
net = fitnet(10);
view(net)
從下圖可以看出,神經網路的輸入和輸出都是0,這是因為此時的神經網路尚未進行配置,以對輸入數據和輸出數據進行匹配。需要對其進行訓練!
接下來需要做得就是訓練:
數據集一共分成三種:訓練數據集、驗證數據集和測試數據集。用訓練數據集對神經網路進行訓練,用以擬合模型,即用這部分數據來建立模型。 驗證數據集,剛才說training建了一個模型,但是模型的效果僅體現了訓練數據,但不一定適合同類的其他數據,所以需要在建模前會將數據分成兩部分,一部分為訓練數據,一部分為驗證數據(兩部分數據的比例大致為7:3,這取決於所採用的驗證方法);另外,有時候也可能訓練多個模型,但不知哪個模型性能更佳,這時可以將驗證數據輸入不同模型進行比較。所以,訓練過程是需要不斷進行的,直到驗證數據集的性能不再有所提升。 test是測試數據,它跟前兩者的最大區別在於:training和validation數據均是同一時期的數據,如都是5-7月數據,但既然是測試,就需要用跨期的數據來驗證模型的穩定性,此時,可採用8月單月數據或9月單月數據對建好的模型進行測試,看性能有沒有下降或偏移。
採用NN Training Tool可以展現被訓練的神經網路和用以訓練的演算法。此外,該工具也展示了訓練的過程中的訓練時態和訓練終止的准則(該准則用綠色進行標注)。在該UI底部的可以繪制。在演算法名稱和繪制按鈕的旁邊都有其對應的鏈接,以補充對該演算法或者繪制圖像的說明。
可以點擊"Performance" 按鈕或者用語句plotperform(tr)來查看神經網路在訓練過程性能的提升。該性能的測量是基於最小均方誤差,以對數log為底進行顯示。在訓練過程中可以發現該曲線是迅速下降的。且需要注意,多次運行所需要的迭代次數是不一樣的。圖中綠色圈圈所指示的是驗證數據集性能最好的地方。
測試神經網路
通過測量測試數據的最小均方誤差,可以感知經過訓練的神經網路對應真實數據所表現出來的性能。
testX = x(:,tr.testInd);
testT = t(:,tr.testInd);
testY = net(testX);
perf = mse(net,testT,testY)
此外,也可以通過繪制回歸線來測量神經網路對應數據的擬合程度。下面基於所有樣本繪制回歸線:
y = net(x);
plotregression(t,y)
若神經網路已經訓練好,可以對數據進行擬合,則在回歸圖上面線性輸出的目標擬合曲線Fit應該橫貫左下角和右上角。若是沒有達到,則需要繼續進行訓練,或者採用更多神經元的神經網路進行訓練。
第三種測量神經網路對於數據的擬合程度方法是誤差分布圖。誤差分布圖可以展示誤差情況,一般多數誤差是靠近0的,只有少數遠離0。
Ⅳ 非線性建模-神經網路
這學期選修了Python與演算法基礎,利用Python語言編寫力圖實現高效演算法。前期接觸了線性建模中的單變數及多元變數回歸模型、多項式回歸和灰度模型等。目前正在解決非線性建模問題,引入了神經網路的概念,這里作為自我梳理。
首先該網路有三層:輸入層、隱含層和輸出層。輸入層進行變數與優化權重的加權計算,每個節點輸出z=Σxiwij,此時我們把多個變數(x),變為了單個變數(z)。隱含層完成「非線性的實現」,節點值ho=1/((1+e^(-z))),此處使用了生長函數。當我們調節wij(優化權重),使模型收斂,就能解決該非線性問題。
接著我們建立MLPClassifier神經網路模型。以下辨明多個參數。
hidden_layer_sizes :用元組,一個數字代表一個隱含層的節點。如hidden_layer_sizes=(50,50) 兩個隱含層,每層50個節點hidden_layer_sizes=(60,) 一個隱含層,60個節點,其中逗號不能省略
activation :激活函數, 對Σxiwij的函數轉換。
{'identity','logistic', 'tanh', 'relu'}, 默認relu
•identity:f(x)= x
•logistic:其實就是sigmod,f(x) = 1 / (1 + exp(-x)).
•tanh:f(x) = tanh(x).
•relu:f(x) = max(0, x)
solver : {'bfgs', 'sgd', 'adam'}, 默認adam,用來優化權重
lbfgs:quasi-Newton(擬牛頓法)方法的優化器
sgd:隨機梯度下降
adam: Kingma, Diederik, and Jimmy Ba提出的基於隨機梯度的優化器
注意:默認solver 'adam',在相對較大的數據集上效果比較好(幾千個樣本或者更多),對小數據集來說,lbfgs收斂更快效果也更好。
learning_rate :學習率,用於權重更新,只有當solver為』sgd』時使用,{'constant','invscaling', 'adaptive'},默認constant
•constant: 由learning_rate_init給定的恆定學習率
•invscaling:隨著時間t使用power_t的逆標度指數不斷降低學習率learning_rate_ ,effective_learning_rate = learning_rate_init / pow(t, power_t)
•adaptive:只要訓練損耗在下降,就保持學習率為learning_rate_init不變,當連續兩次不能降低訓練損耗或驗證分數停止升高至少tol時,將當前學習率除以5。
Ⅳ BP神經網路的非線性系統建模
在工程應用中經常會遇到一些復雜的非線性系統(我們航空發動機就是典型的強非線性模型),這些系統狀態方程復雜,難以用數學方法准確建模。在這種情況下,可以建立BP神經網路表達這些非線性系統。該方法把未知系統看成黑箱,首先用系統輸入輸出數據訓練BP神經網路,使網路能夠表達該未知函數,然後用訓練好的BP神經網路預測系統輸出。
本文要擬合的非線性函數是
該函數的圖形如下圖1所示。
回顧上一篇文章建立BP網路的演算法流程,進行具有非線性函數擬合的BP網路可以分為網路構建、訓練和預測三步,如下圖2所示。
BP神經網路構建 根據要擬合的非線性函數特點確定BP網路結構,由於該非線性函數有兩個輸入參數,一個輸出參數,所以BP網路結構可以設置為2-5-1,即輸入層有2個節點,隱含層有5個節點,輸出層有1個節點。
BP神經網路訓練 用非線性函數輸入輸出數據訓練神經網路,使訓練後的網路能夠預測非線性函數輸出。從非線性函數中隨機得到2 000組輸入輸出數據,從中隨機選擇1 900組作為訓練數據,用於網路訓練,100組作為測試數據,用於測試網路的擬合性能。
神經網路預測 用訓練好的網路預測輸出,並對預測結果進行分析。
根據非線性函數方程隨機得到該函數的2 000組輸入輸出數據,將數據存儲在data.mat文件中,input是函數輸入數據,output是函數輸出數據。從輸入輸出數據中隨機選取1 900組數據作為網路訓練數據,100組作為網路測試數據,並對訓練數據進行歸一化處理。
用訓練數據訓練BP神經網路,使網路對非線性函數輸出具有預測能力。
用訓練好的BP神經網路預測非線性函數輸出,並通過BP神經網路預測輸出和期望輸出,分析BP神經網路的擬合能力。
用訓練好的BP神經網路預測函數輸出,預測結果如下圖3所示。
BP神經網路預測輸出和期望輸出的誤差如下圖4所示。
從圖3和圖4可以看出,雖然BP神經網路具有較高的擬合能力,但是網路預測結果仍有一定誤差,某些樣本點的預測誤差較大。
在上一篇文章中提到了調整隱含層節點數目、改變權值和閾值更新演算法以及變學習率學習演算法等方法,針對非線性擬合,BP神經網路的優化還可以使用多隱層的BP神經網路、改變激活函數等方法。
Ⅵ 怎麼判斷是線性回歸還是非線性回歸
在計量經濟學中,線性或非線性,不是針對自變數而言的,也就是X,而是針對自變數的系數參數而言的.如:
y=a+bx這是線性,y=a+bx+cx^2這也是線性,因為a b c導數都是常數,或者說都是1次的,而y=a+bcX1+dX2,這樣的模型就是非線性的,因為bc是2次的.區分其實就這么簡單.先說原理,數據中隱含有模式,要做的是把模式提取出來(即模型)。模式提取的充分與否,是看殘差(提取模式後剩下的)是否不再含有模式,如果是,則殘差服從0附近的正態分布(即隨機白雜訊),此時模型已經是成功的充分模型。否則,說明數據中的模式沒有完全提取出來,模型是不充分的,需要繼續改進。
再說具體操作,可以先選用簡單的多元線性回歸模型,然後檢驗殘差,若是隨機白雜訊,則完成建模。否則就需要繼續引入各變數的非線性項、交互項,當然優先從低次到高次。那麼引入很多項進來,如何取捨,用逐步回歸即可。
Ⅶ 非線性Granger因果關系發現的可解釋稀疏神經網路模型
雖然大多數經典的格蘭傑因果關系檢測方法依賴於線性時間序列假設,但神經科學和經濟學應用中的許多交互作用是非線性的。我們發展了一種使用多層感知器的非線性格蘭傑因果關系檢測方法,其中網路的輸入是所有序列的過去時間滯後,輸出是單個序列的未來值。在這種情況下,Granger非因果關系的一個充分條件是,輸入數據的所有輸出權重(序列的過去滯後)到第一個隱藏層都為零。對於估計,我們使用一組套索懲罰將輸入權重組縮小為零。我們還提出了一個等級懲罰同時格蘭傑因果關系和滯後估計。我們在稀疏線性自回歸模型和稀疏非線性Lorenz-96模型的模擬數據上驗證了我們的方法。
格蘭傑因果關系量化了一個時間序列的過去活動對另一個時間序列的預測程度。當研究一個完整的時間序列系統時,相互作用網路可能會被發現[2]。經典上,估計格蘭傑因果關系的大多數方法假設線性時間序列動力學,並使用流行的向量自回歸(VAR)模型[9,8]。然而,在許多現實世界的時間序列中,序列之間的依賴是非線性的,使用線性模型可能導致格蘭傑因果相互作用的不一致估計[12,13]。估計時間序列中相互作用的常見非線性方法使用加法模型[12,4,11],其中每個序列的過去可能有一個相加的非線性效應,在序列之間解耦。然而,加性模型可能會忽略預測因子之間重要的非線性相互作用,因此也可能無法檢測到重要的Granger因果關系。
為了解決這些挑戰,我們提出了一個框架,以解釋非線性格蘭傑因果關系發現使用正則化神經網路。用於時間序列分析的神經網路模型傳統上只用於預測和預測,而不用於解釋。這是因為,由於隱藏層中相互作用的節點錯綜復雜,輸入的影響難以精確量化。我們避開了這個困難,而是構建了一個簡單的體系結構,允許我們精確地選擇對輸出沒有線性或非線性影響的時間序列。
我們將最近關於神經網路體系結構選擇稀疏誘導懲罰的研究[1,7]應用到我們的案例中。特別是,我們通過在輸入的輸出權重上添加一組套索懲罰[14]來選擇格蘭傑因果關系,我們稱之為編碼選擇。我們還探討了一種自動滯後選擇的分層套索懲罰[10]。當真實的非線性相互作用網路是稀疏的時,該方法將選取Granger引起的輸出序列和這些相互作用的滯後的幾個時間序列
Ⅷ 非線性是神經網路的王道啥意思
神經元的廣泛互聯與並行工作必然使整個網路呈現出高度的非線性特點。在客觀世界中,許多系統的輸入與輸出之間存在著復雜的非線性關系,對於這類系統,往往很難用傳統的數理方法建立其數學模型。設計合理地神經網路通過對系統輸入輸出樣本對進行自動學習,能夠以任意精度逼近任何復雜的非線性映射。神經網路的這一優點能使其可以作為多維非線性函數的通用數學模型。該模型的表達式非解析的,輸入輸出數據之間的映射規則由神經網路在學習階段自動抽取並分布式存儲在網路的所有連接中。具有非線性映射功能的神經網路應用十分廣闊,幾乎涉及所有領域。
Ⅸ 神經網路做函數逼近,會做了,但是函數逼近到底有什麼用處呢
針對你前兩個問題:
在系統建模、辨識和預測中,對於線性系統,在頻域,傳遞函數矩陣可以很好地表達系統的黑箱式輸入輸出模型;在時域,Box-Jenkins方法、回歸分析方法、ARMA模型等,通過各種參數估計方法也可以給出描述。對於非線性時間序列預測系統,雙線性模型、門限自回歸模型、ARCH模型都需要在對數據的內在規律知道不多的情況下對序列間關系進行假定。
可以說傳統的非線性系統預測,在理論研究和實際應用方面,都存在極大的困難。相比之下,神經網路可以在不了解輸入或輸出變數間關系的前提下完成非線性建模。神經元、神經網路都有非線性、非局域性、非定常性、非凸性和混沌等特性,與各種預測方法有機結合具有很好的發展前景,也給預測系統帶來了新的方向與突破。建模演算法和預測系統的穩定性、動態性等研究成為當今熱點問題。目前在系統建模與預測中,應用最多的是靜態的多層前向神經網路,這主要是因為這種網路具有通過學習逼近任意非線性映射的能力。利用靜態的多層前向神經網路建立系統的輸入/輸出模型,本質上就是基於網路逼近能力,通過學習獲知系統差分方程中的非線性函數。但在實際應用中,需要建模和預測的多為非線性動態系統,利用靜態的多層前向神經網路必須事先給定模型的階次,即預先確定系統的模型。
針對你第三個問題:
預測是利用數理統計的原理作出假設,給出預測區間,准不準也只是從統計的角度來講,也就是說准確度實際上是相對的,預測區間越不精確可信度就越大,預測區間越精確可信度就越小,也就是說你想要精確一點的話,就要犧牲一點可信度
Ⅹ 神經網路非線性回歸怎麼做
給你一個例子來說明如何用神經網路非線性回歸。
如,用神經網路擬合函數y=0.12*exp(-0.23*x)+0.54*exp(-0.17*x)*sin(1.23*x)
執行代碼如下: