Keras multi-output model wrongly calculate target dimensions: ValueError: Error when checking target

Keras multi-output model wrongly calculate target dimensions: ValueError: Error when checking target

我正在尝试从一个有效的单一输出模型开始构建一个多输出 keras 模型。然而,Keras 抱怨张量维度。

单输出型号:

此 GRU 模型训练和预测良好:

timesteps = 250
features = 2

input_tensor = Input(shape=(timesteps, features), name="input")
conv = Conv1D(filters=128, kernel_size=6,use_bias=True)(input_tensor)
b = BatchNormalization()(conv)
s_gru, states = GRU(256, return_sequences=True, return_state=True, name="gru_1")(b)
biases = keras.initializers.Constant(value=88.15)
out = Dense(1, activation='linear', name="output")(s_gru)
model = Model(inputs=input_tensor, outputs=out)

我的 numpy 数组是:

train_x # shape:(7110, 250, 2) 
train_y # shape: (7110, 250, 1) 

如果用下面的代码拟合模型,一切正常:

model.fit(train_x, train_y,batch_size=128, epochs=10, verbose=1)

问题:

我想使用一个稍微修改过的网络版本,它也输出 GRU 状态:

input_tensor = Input(shape=(timesteps, features), name="input")
conv = Conv1D(filters=128, kernel_size=6,use_bias=True)(input_tensor)
b = BatchNormalization()(conv)
s_gru, states = GRU(256, return_sequences=True, return_state=True, name="gru_1")(b)
biases = keras.initializers.Constant(value=88.15)
out = Dense(1, activation='linear', name="output")(s_gru)
model = Model(inputs=input_tensor, outputs=[out, states]) # multi output

#fit the model but with a list of numpy array as y
model.compile(optimizer=optimizer, loss='mae', loss_weights=[0.5, 0.5])
history = model.fit(train_x, [train_y,train_y], batch_size=128, epochs=10, callbacks=[])

这次训练失败,keras 抱怨目标维度:

ValueError: Error when checking target: expected gru_1 to have 2 dimensions, but got array with shape (7110, 250, 1)

我正在使用 Keras 2.3.0 和 Tensorflow 2.0。

我在这里错过了什么?

第二个输出的维度和 outputs 列表中的第二个元素应该具有相似的形状。在这种情况下,states 的形状将是 (7110, 256),这不能与 train_y 的形状(如第一个中所述的 (7110, 250, 1) 的形状相比)代码块。确保输出可以与相似的形状进行比较。