問題介紹
該問題是在訓練全連接網絡中發現loss振盪遇到的。
問題如下:
調用tf.square(y - y_pred)發現返回值是一個n*n的張量。
(注:這裏的y和y_pred都是一維向量,y是訓練數據中的真實值,y_pred是預測值)
原因
導致該問題的原因是因爲y和y_pred的維度不對應。
例如: y是利用pandas導入,再使用np.array(y),得到的shape是(10, );而y_pred是利用神經網絡訓練後,得到的形式是TensorShape([10, 1])
即是使用一個一維的張量減去一個二維的張量,故而最後y - y_pred得到的是一個n*n的二維張量。
解決
解決方法就是統一維度,可以把y變二維,也可以把y_pred變一維,本人常常做的事y變二維。
一個簡單的y = y.reshape(n, 1)搞定
維度變化視情況而定,如果y是多維的,也可以直接打印出y_pred是shape,然後用reshape進行維度統一。