我已經訓練了一個 LSTM 模型來預測多個輸出值。即使損失較小,預測值也幾乎相同。為什么會這樣?我該如何改進它?
`from keras import backend as K
import math
from sklearn.metrics import mean_squared_error, mean_absolute_error
from keras.layers.core import Dense, Dropout, Activation
def create_model():
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(40000, 7)))
model.add(LSTM(50, return_sequences= True))
model.add(LSTM(50, return_sequences= False))
model.add(Dense(25))
model.add(Dense(2, activation='linear'))
model.compile(optimizer='adam', loss='mean_squared_error')
model.summary()
return model
model = create_model()
model.fit(X_train, Y_train, shuffle=False, verbose=1, epochs=10)
prediction = model.predict(X_test, verbose=0)
print(prediction)
prediction =
[[0.26766795 0.00193274]
[0.2676593 0.00192017]
[0.2676627 0.00193239]
[0.2676644 0.00192784]
[0.26766634 0.00193461]
[0.2676624 0.00192487]
[0.26766685 0.00193129]
[0.26766685 0.00193165]
[0.2676621 0.00193216]
[0.26766127 0.00192624]]
`
計算 mean_relative 誤差
`mean_relative_error = tf.reduce_mean(tf.abs((Y_test-prediction)/Y_test))
print(mean_relative_error)`
`mean_relative_error= 1.9220362`
uj5u.com熱心網友回復:
這意味著您只是將 x 的值關閉為最接近 y。就像映射 x -> y 一樣。相對誤差對我說,你的 y 相對較小,當你取 y_hat 和 y 之間的平均差時,它們已經足夠接近了......
要打破這種對稱性,您應該增加 LSTM 單元的數量并向其添加 Dropout,同時確保將L1-Regularization項放入密集層中。
減少每個密集層的神經元數量并增加網路大小,還將損失從“mean_squared_error”更改為“mean_absolute_error”。
還有一件事是使用learning_rate 為 1 的Adagrad ,而不是Adam Optimizer。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/520891.html
