[英]Constant Output and Prediction Syntax with LSTM Keras Network
我是神经网络的新手,有两个可能非常基本的问题。 我正在建立一个通用的 LSTM 网络来预测序列的未来,基于多个特征。 因此,我的训练数据具有以下形状(训练序列的数量、每个序列的长度、每个时间步的特征量)。 或者更具体一些,比如 (2000, 10, 3)。 我试图预测一个特征的价值,而不是所有三个特征的价值。
如果我让我的网络更深和/或更宽,我得到的唯一输出是要预测的值的常数平均值。 以这个设置为例:
z0 = Input(shape=[None, len(dataset[0])])
z = LSTM(32, return_sequences=True, activation='softsign', recurrent_activation='softsign')(z0)
z = LSTM(32, return_sequences=True, activation='softsign', recurrent_activation='softsign')(z)
z = LSTM(64, return_sequences=True, activation='softsign', recurrent_activation='softsign')(z)
z = LSTM(64, return_sequences=True, activation='softsign', recurrent_activation='softsign')(z)
z = LSTM(128, activation='softsign', recurrent_activation='softsign')(z)
z = Dense(1)(z)
model = Model(inputs=z0, outputs=z)
print(model.summary())
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
history= model.fit(trainX, trainY,validation_split=0.1, epochs=200, batch_size=32,
callbacks=[ReduceLROnPlateau(factor=0.67, patience=3, verbose=1, min_lr=1E-5),
EarlyStopping(patience=50, verbose=1)])
如果我只使用一层,例如:
z0 = Input(shape=[None, len(dataset[0])])
z = LSTM(4, activation='soft sign', recurrent_activation='softsign')(z0)
z = Dense(1)(z)
model = Model(inputs=z0, outputs=z)
print(model.summary())
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
history= model.fit(trainX, trainY,validation_split=0.1, epochs=200, batch_size=32,
callbacks=[ReduceLROnPlateau(factor=0.67, patience=3, verbose=1, min_lr=1E-5),
EarlyStopping(patience=200, verbose=1)])
这些预测有些合理,至少它们不再是恒定的。
为什么会这样? 大约 2000 个样本并不多,但在过度拟合的情况下,我希望预测能够完美匹配......
当我使用:
`test=model.predict(trainX[0])`
为了得到第一个序列的预测,我得到一个维度错误:
“检查时出错:预期 input_1 有 3 个维度,但得到形状为 (3, 3) 的数组”
我需要输入一系列序列,例如:
`test=model.predict(trainX[0:1])`
这是一种解决方法,但我不确定这是否有更深层次的含义,或者只是一个语法问题......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.