为什么 LSTM 会有基线,如何提高性能?
Why there will be a baseline for LSTM and how to improve the performance?
我有一个具有以下配置的 LSTM 网络:
model3 = tf.keras.Sequential()
model3.add(tf.keras.layers.LSTM(15, input_shape=(1, 10), return_sequences=True))
model3.add(tf.keras.layers.LSTM(5))
model3.add(tf.keras.layers.Dense(1, activation=None))
model3.compile(loss='mean_squared_error', optimizer='adam')
model3.fit(trainX, trainY, epochs=100, batch_size=30)
结果可以预测趋势但是会有一个稳定的基线,这是不正常的。如下图:
所以我想知道为什么我最后一层没有激活函数也有稳定的线。以及如何提高性能。
您正在使用两个非常小的 LSTM 层来预测我假设的有限数据。因此,学习到的输入和输出之间的关系将是非常基本的(与深度模型相反)。
关于你的问题,你必须根据你的成本函数分析输出。使用诸如 MSE 之类的成本函数将对模型进行惩罚,因为输出值与真实值之间存在较大差异,并且模型在这里学到的似乎是该值(大约 900)是使用少量最小化 MSE 的值可用的参数。那么这个 "abnormal" 是你描述的吗?我会说,如果这条线看起来几乎不是一条贯穿数据较低值的最佳线,那是不正常的。
如果您的训练数据不足(请参阅 CNN 或加窗 ANN),我建议您使用更简单的网络,或者查看是否可以获得更多训练数据。
我有一个具有以下配置的 LSTM 网络:
model3 = tf.keras.Sequential()
model3.add(tf.keras.layers.LSTM(15, input_shape=(1, 10), return_sequences=True))
model3.add(tf.keras.layers.LSTM(5))
model3.add(tf.keras.layers.Dense(1, activation=None))
model3.compile(loss='mean_squared_error', optimizer='adam')
model3.fit(trainX, trainY, epochs=100, batch_size=30)
结果可以预测趋势但是会有一个稳定的基线,这是不正常的。如下图:
所以我想知道为什么我最后一层没有激活函数也有稳定的线。以及如何提高性能。
您正在使用两个非常小的 LSTM 层来预测我假设的有限数据。因此,学习到的输入和输出之间的关系将是非常基本的(与深度模型相反)。
关于你的问题,你必须根据你的成本函数分析输出。使用诸如 MSE 之类的成本函数将对模型进行惩罚,因为输出值与真实值之间存在较大差异,并且模型在这里学到的似乎是该值(大约 900)是使用少量最小化 MSE 的值可用的参数。那么这个 "abnormal" 是你描述的吗?我会说,如果这条线看起来几乎不是一条贯穿数据较低值的最佳线,那是不正常的。
如果您的训练数据不足(请参阅 CNN 或加窗 ANN),我建议您使用更简单的网络,或者查看是否可以获得更多训练数据。