TensorFlow 2.0堆叠LSTM训练报错:'NoneType' object is not callable
解决堆叠LSTM训练时出现TypeError: 'NoneType' object is not callable的问题
我之前在TensorFlow 2.x里堆叠LSTM时也踩过这个坑,大概率是你**没有给中间的LSTM层设置return_sequences=True**导致的!
问题原因
LSTM层默认参数return_sequences=False,这意味着它只会返回序列的最后一个时间步的输出(形状为(batch_size, units))。而当你在它后面再堆叠LSTM层时,下一层LSTM需要接收3维的序列输入((batch_size, timesteps, features)),如果输入是2维的,TensorFlow内部的序列处理逻辑会失效,进而抛出'NoneType' object is not callable这种看似模糊的错误。
你的单层LSTM能正常运行,是因为最后一层LSTM直接接Dense层,Dense层可以处理2维输入;但堆叠多层时,中间的LSTM必须输出完整序列供下一层处理。
修复后的堆叠LSTM模型
把中间的LSTM层都加上return_sequences=True,最后一层LSTM保持默认(或者显式设为False)即可:
comp_lstm = tf.keras.models.Sequential([ # 第一层LSTM:返回完整序列给下一层 tf.keras.layers.LSTM(8, return_sequences=True), # 第二层LSTM:同样返回完整序列 tf.keras.layers.LSTM(8, return_sequences=True), # 第三层LSTM:只返回最后一个时间步的输出,给Dense层处理 tf.keras.layers.LSTM(8), tf.keras.layers.Dense(1) ]) # 编译和训练和之前一致 comp_lstm.compile(optimizer='adam', loss='mae') history = comp_lstm.fit(train, epochs=EPOCHS, steps_per_epoch=EVALUATION_INTERVAL, validation_data=val, validation_steps=50)
额外检查点
如果修复后还是报错,可以再确认这几点:
- 确保
comp_lstm模型被正确定义,没有被误赋值为None - 检查你的数据集输入形状是否稳定(从你给出的
RepeatDataset形状来看是没问题的,输入是(None, 42315, 20)的3维序列) - 如果你要做多时间步的回归预测(比如每个时间步都输出一个值),那最后一层Dense也需要加上
return_sequences=True,同时确保标签形状匹配
内容的提问来源于stack exchange,提问作者SDG
相关产品推荐
相关产品推荐

