python - TimeDistributed Layer:不兼容的形状:[32,3,3] vs. [32,3]
问题描述
我有一个以前可以工作的模型,但现在它不起作用。它给出了一个错误:
InvalidArgumentError:不兼容的形状:[32,3,3] 与 [32,3] [[{{node Nadam/gradients/loss/time_distributed_loss/SquaredDifference_grad/BroadcastGradientArgs}}]]
旧型号:
class Model:
def set_the_model(self, look_back):
self.model = Sequential()
self.model.add(LSTM(16, activation="relu", input_shape=(look_back, 3),return_sequences=True)) #, stateful=True
self.model.add(Dropout(0.2))
self.model.add(LSTM(32, activation="relu", return_sequences=True))
self.model.add(Dropout(0.2))
self.model.add(TimeDistributed(Dense(look_back)))
#self.model.add(Dense(3))
self.model.compile(loss="mse", optimizer="nadam", metrics=['acc']) #mse
self.model.summary()
def start_train(self, trainD1, trainD2):
es = EarlyStopping(monitor='loss', patience = 2, mode='min')
#for i, j in trainD1, trainD2:
self.model.fit(trainD1, trainD2, epochs=200, batch_size = 32, verbose=1, callbacks=[es])
# self.model.reset_states()
def predict_result(self, test_case):
value = self.model.predict(test_case, verbose=0)
return value
当我在start_train
方法中取消注释两行代码时,错误就开始了,我把代码变成了这个(当前模型):
class Model:
def set_the_model(self, look_back):
self.model = Sequential()
self.model.add(LSTM(16, activation="relu", batch_input_shape=(1,look_back, 3),return_sequences=True, stateful=True))
self.model.add(Dropout(0.2))
self.model.add(LSTM(32, activation="relu", return_sequences=True))
self.model.add(Dropout(0.2))
self.model.add(TimeDistributed(Dense(look_back)))
#self.model.add(Dense(3))
self.model.compile(loss="mse", optimizer="nadam", metrics=['acc']) #mse
self.model.summary()
def start_train(self, trainD1, trainD2):
es = EarlyStopping(monitor='loss', patience = 2, mode='min')
for i, j in zip(trainD1, trainD2):
self.model.fit(i, j, epochs=200, batch_size = 1, verbose=1, callbacks=[es])
self.model.reset_states()
def predict_result(self, test_case):
value = self.model.predict(test_case, verbose=0)
return value
然后,我想回到旧模型。当我开始训练模型时,它给出了上面的错误。
这是模型的样子:
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm (LSTM) (None, 3, 16) 1280
_________________________________________________________________
dropout (Dropout) (None, 3, 16) 0
_________________________________________________________________
lstm_1 (LSTM) (None, 3, 32) 6272
_________________________________________________________________
dropout_1 (Dropout) (None, 3, 32) 0
_________________________________________________________________
time_distributed (TimeDistri (None, 3, 3) 99
=================================================================
Total params: 7,651
Trainable params: 7,651
Non-trainable params: 0
编辑:我batch_size
在旧模型上改为 1,现在它可以工作了,但是现在,它会非常慢。
解决方案
推荐阅读
- javascript - setInterval 和 setTimeout 中的间隔不准确
- asciidoc - 如何为现有的 Asciidoctor Asciidoc 宏创建自定义 HTML 输出?
- java - 来自 SQL 数据库的带有时间的 JFreechart 图表
- node.js - 尝试在 Node.js 上运行项目时出错
- javascript - 用于解码 PDF 流的 JavaScript 库
- python - 如何在python中增加样本日期
- amazon-web-services - Azure Devops 服务和 VPN - 加密数据
- android-espresso - 如何从 Espresso DataInteraction 获取列表大小
- windows - 一个 - 并且只有一个 - 网络文件夹的访问问题
- swift - 如何在 SwiftUI 的不同视图中更新 Cloud Firestore 中的数据?