【发布时间】:2023-12-16 03:43:01
【问题描述】:
我正在尝试构建 LSTM 架构来预测患病率(0%-100%)。我的输入是一个尺寸为 4760x10 的数组(每个城镇每个年龄的病人人数,咨询次数.....)我的输出或 y 是发病率。
我是机器学习的新手,我尝试了一些技巧,例如更改优化器、层节点数和 dropout 值,但我的模型没有收敛(最低 mse 为 =616.245)。我还尝试使用“MinMaxScaler”来扩展我的数据。那么你们能否帮我提供一些建议来改变架构或进行一些数据处理以帮助模型收敛。
这是给我 mse=616.245 的 lstm 模型
def build_modelz4():
model = Sequential()
model.add(LSTM(10, input_shape=(1, 10), return_sequences=True))
model.add(LSTM(84, return_sequences= True))
model.add(LSTM(84, return_sequences=False))
model.add(Dense(1,activation='linear'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mean_squared_error'] )
model.summary()
return model
lstmz4 = build_modelz4()
checkpointer = ModelCheckpoint(filepath="weightslstmz4.hdf5", verbose=1, save_best_only=True)
newsclstmhis = lstmz4.fit(trainX,trainY,epochs=1000,batch_size=221, validation_data=(testX, testY) ,verbose=2, shuffle=False, callbacks=[checkpointer])
请注意,当我使用 ANN 模型时,它收敛于 mse=0.8。所以使用 lstm 它应该收敛 并提前感谢您
【问题讨论】:
-
你为什么使用 LSTM?你的数据是时间序列数据吗?输入形状为 4760x10,看起来 4760 是人数,10 是特征数。您是否有随时间推移获得的样本?
-
4760 是每个城镇的周数,预测与实际情况相去甚远
-
我明白了。使用带有 input_shape=(1, 10) 的 LSTM 没有意义。您将时间步数设置为 1,这意味着您没有使用历史来预测未来。相反,开始将您的数据“切割”成时间序列数据块,例如每个具有 12 个时间步长的样本,然后将 LSTM 拟合到新数据。
-
@SaTa 请问怎么做?
标签: keras deep-learning lstm loss-function convergence