Python 时间分布层:不兼容的形状:[32,3,3]与[32,3]
我有一个模型,以前是有效的,但现在它不工作。它给出了一个关于以下内容的错误: InvalidArgumentError:不兼容的形状:[32,3,3]与[32,3] [{{node-Nadam/gradients/loss/time_-distributed_-loss/SquaredDifference_-grad/BroadcastGradientArgs}] 旧型号:Python 时间分布层:不兼容的形状:[32,3,3]与[32,3],python,tensorflow,machine-learning,neural-network,tf.keras,Python,Tensorflow,Machine Learning,Neural Network,Tf.keras,我有一个模型,以前是有效的,但现在它不工作。它给出了一个关于以下内容的错误: 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.mod
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\u train
方法中取消注释两行代码时,错误开始出现,我将代码转换为以下内容(当前模型):
然后,我想回到旧型号。当我开始训练模型时,它给出了上面的错误
这是模型的外观:
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
编辑:在旧模型上,我将批处理大小更改为1,现在可以工作了,但现在速度会非常慢。在数据集中循环每个观察值的目的是什么?正如我正确理解的那样,这正是I,j在zip(trainD1,trainD2)所做的。这就是为什么您的代码处理的是batch_size=1,而不处理较高的batch_size值。@s3nh“旧模型”处理的是单个数据集。第二个模型适用于多个输入,如果我将这些输入组合起来,它将不好(根据我的数据)。我处理的每个输入都不具有相同的输入大小;因此,不能除以32。如果我不作为一个发送,它会给我一个错误
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