keras LSTM模型的所有预测值几乎相同

bt1cpqcv  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(320)

我已经训练了一个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_error = tf.reduce_mean(tf.abs((Y_test-prediction)/Y_test))
print(mean_relative_error)`

`mean_relative_error= 1.9220362`
wwtsj6pe

wwtsj6pe1#

这意味着你只是把x的值封闭为最接近y的值。就像Mapx -〉y一样。相对误差告诉我,你的y相对较小,当你取y_hat和y之间的平均差时,它们足够接近...
要打破这种对称性,您应该增加LSTM单元的数量为其添加一个丢弃,同时确保将L1正则化项放入您的密集层。

减少每个密集层的神经元数量增加网络大小,同时将损失从“mean_squared_error”更改为“mean_absolute_error”。

还有一件事使用学习率为1的Adagrad,而不是Adam Optimizer

相关问题