Keras дает разные результаты, когда я определяю свою модель с помощью декларативного метода вместо функционального метода. Две модели кажутся одинаковыми, но использование синтаксиса ".add ()" работает, в то время как декларативный синтаксис дает ошибки - каждый раз это разные ошибки, но обычно что-то вроде: A target array with shape (10, 1) was passed for an output of shape (None, 16) while using as loss `mean_squared_error`. This loss expects targets to have the same shape as the output.
Кажется, что-то происходитс автоматическим преобразованием входных фигур, но я не могу сказать, что. Кто-нибудь знает, что я делаю не так? Почему эти две модели не являются абсолютно одинаковыми?
import tensorflow as tf
import tensorflow.keras
import numpy as np
x = np.arange(10).reshape((-1,1,1))
y = np.arange(10)
#This model works fine
model = tf.keras.Sequential()
model.add(tf.keras.layers.LSTM(32, input_shape=(1, 1), return_sequences = True))
model.add(tf.keras.layers.LSTM(16))
model.add(tf.keras.layers.Dense(1))
model.add(tf.keras.layers.Activation('linear'))
#This model fails. But shouldn't this be equivalent to the above?
model2 = tf.keras.Sequential(
{
tf.keras.layers.LSTM(32, input_shape=(1, 1), return_sequences = True),
tf.keras.layers.LSTM(16),
tf.keras.layers.Dense(1),
tf.keras.layers.Activation('linear')
})
#This works
model.compile(loss='mean_squared_error', optimizer='adagrad')
model.fit(x, y, epochs=1, batch_size=1, verbose=2)
#But this doesn't! Why not? The error is different each time, but usually
#something about the input size being wrong
model2.compile(loss='mean_squared_error', optimizer='adagrad')
model2.fit(x, y, epochs=1, batch_size=1, verbose=2)
Почему эти две модели не эквивалентны? Почему один обрабатывает входной размер правильно, а другой нет? Вторая модель терпит неудачу с другой ошибкой каждый раз (время от времени это даже работает), поэтому я подумал, может быть, есть какое-то взаимодействие с первой моделью? Но я попытался закомментировать первую модель, и это не помогает. Так почему же второй не работает?
ОБНОВЛЕНИЕ: Вот "model.summary () для первой и второй модели. Они кажутся разными, но я не понимаю, почему.
Для модели.summary ():
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm (LSTM) (None, 1, 32) 4352
_________________________________________________________________
lstm_1 (LSTM) (None, 16) 3136
_________________________________________________________________
dense (Dense) (None, 1) 17
_________________________________________________________________
activation (Activation) (None, 1) 0
=================================================================
Total params: 7,505
Trainable params: 7,505
Non-trainable params: 0
Для модели2.summary ():
model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_2 (LSTM) (None, 1, 32) 4352
_________________________________________________________________
activation_1 (Activation) (None, 1, 32) 0
_________________________________________________________________
lstm_3 (LSTM) (None, 16) 3136
_________________________________________________________________
dense_1 (Dense) (None, 1) 17
=================================================================
Total params: 7,505
Trainable params: 7,505
Non-trainable params: 0```