Я пытаюсь построить модель 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.
Что мне здесь не хватает?