Сообщение об ошибке пытается сообщить вам, что форма вашего ввода для слоя «узкого места» во второй модели отличается от первой.
Для повторного использования нужного вам слоячтобы сопоставить количество входов в этот слой.В вашем случае первая модель имеет 497904 входов в этот слой, но вы пытаетесь использовать его в своей следующей модели с входным слоем с 876990 входами.
Я подозреваю, что вы хотите что-то более подобное (заметьте, у меня естьв каждом случае сразу сглаживается, чтобы мы могли лучше контролировать количество входов на каждом слое):
m = Sequential()
m.add(Flatten(input_shape=(943, 1)))
m.add(Dense(912, activation='relu'))
m.add(Dense(728, activation='relu'))
m.add(Dense(528, activation='relu'))
m.add(Dense(500, activation='relu', name="bottleneck"))
m.add(Dense(528, activation='relu'))
m.add(Dense(728, activation='relu'))
m.add(Dense(943, activation='linear'))
m.compile(loss='mean_squared_error', optimizer='SGD')
m.summary()
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
flatten (Flatten) (None, 943) 0
_________________________________________________________________
dense (Dense) (None, 912) 860928
_________________________________________________________________
dense_1 (Dense) (None, 728) 664664
_________________________________________________________________
dense_2 (Dense) (None, 528) 384912
_________________________________________________________________
bottleneck (Dense) (None, 500) 264500
_________________________________________________________________
dense_3 (Dense) (None, 528) 264528
_________________________________________________________________
dense_4 (Dense) (None, 728) 385112
_________________________________________________________________
dense_5 (Dense) (None, 943) 687447
=================================================================
Total params: 3,512,091
Trainable params: 3,512,091
Non-trainable params: 0
И обратите внимание, что вход для нашего узкого слоя имеет форму (None,528)
.Итак, теперь во второй модели мы можем сделать:
model = Sequential()
model.add(Dense(930, activation='relu', input_shape=(943, 1)))
model.add(Flatten())
model.add(Dense(528, activation='relu'))
model.add(m.get_layer('bottleneck'))
model.add(Flatten())
model.add(Dense(100, activation='linear'))
model.summary()
Model: "sequential_2"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_9 (Dense) (None, 943, 930) 1860
_________________________________________________________________
flatten_3 (Flatten) (None, 876990) 0
_________________________________________________________________
dense_10 (Dense) (None, 528) 463051248
_________________________________________________________________
bottleneck (Dense) (None, 500) 264500
_________________________________________________________________
flatten_4 (Flatten) (None, 500) 0
_________________________________________________________________
dense_11 (Dense) (None, 100) 50100
=================================================================
Total params: 463,367,708
Trainable params: 463,367,708
Non-trainable params: 0