使用全連線神經網路loss為0的問題

2021-10-11 23:58:58 字數 1140 閱讀 5598

之前的使用低氧艙對滯後時間估計的模型中,計算loss時出現了全為0的情況。

訓練結果如圖所示:分別

分別為權重引數和loss。

檢查**發現,一直到第乙個隱藏層都沒有任何問題。

問題出在了下面一行**上:

loss = tf1.reduce_mean(tf1.nn.softmax_cross_entropy_with_logits_v2(logits=net1_out,labels = y )

)

問題原因**:

定義神經網路的layers(層)以及初始化每一層的引數

然後迭代:

前向傳播(forward propagation)

計算cost(compute cost)

反向傳播(backward propagation)

更新引數(update parameters)

使用訓練好的引數去做**

在訓練的時候發現了乙個很奇怪的現象:每一次迭代所有的cost都為0。一開始以為是引數初始化出了問題,花了好多時間在上面。後來仔細研究了一下發現是最後一層的輸出函式用錯了,我用的是tf.nn.softmax_cross_entropy_with_logits來計算cost。 我們知道softmax一般是用來做multiclass classifier的,也就是輸出的類別要大於兩個。對於乙個binary classifier而言,很明顯我們要用sigmoid函式也就是tf.nn.sigmoid_cross_entropy_with_logits來計算cost,於是問題解決。

為什麼?

那麼為什麼在binary classifier中使用了softmax之後cost就一直是0呢?我們先來看一下softmax的公式:

s(z)j=ezj∑kk=1ezk

binary classifier的output是一維的(one-dimension 0/1),那麼如果只有乙個元素,那麼s(z)就永遠等於1,不管z的值是多少。

恆定輸出1之後,我們結合交叉熵的計算公式可知:

如果true label是0,那麼 -0log(1) = 0

如果true label是1,那麼 -1log(1) = 0

神經網路 全連線神經網路

全連線神經網路 也稱作多層感知機 mlp 1.1 神經元 神經元接收輸入向量x xx神經元節點有權重向量w和偏置項b 輸出值為f w tx b f w tx b f wtx b 在經過類似線性回歸之後 使用啟用函式對得到值進行操作 1.2 網路結構 個人對於每一層的理解就是 使用 這層維度,上層維度...

什麼是全連線神經網路

對n 1層和n層而言 n 1層的任意乙個節點,都和第n層所有節點有連線。即第n層的每個節點在進行計算的時候,啟用函式的輸入是n 1層所有節點的加權。全連線是一種不錯的模式,但是網路很大的時候,訓練速度回很慢。部分連線就是認為的切斷某兩個節點直接的連線,這樣訓練時計算量大大減小 最簡單的全連線神經網路...

mlp神經網路 MLP(全連線神經網路)的反向傳播

3 梯度消失與 mlp可以說是最簡單的一種ann結構了,輸入通過若干個隱藏層後,進入輸出層得到輸出。下圖展示了只有乙個單隱層的mlp。圖1 單隱層mlp 如果使用交叉熵損失函式 cross entropy error function 需要在輸出層的狀態值 如果使用mse損失函式 mean squa...