Это просто артефакт представления модели Keras, когда используется Sequential API, и он не имеет никакого практического эффекта: неявно присутствует слой Input
, но он не считается надлежащим слоем и не отображаетсяв model.summary()
.Он показывает , если используется функциональный API.
Рассмотрим следующие две идентичные модели, написанные с использованием двух разных API:
Последовательный API
from keras.models import Sequential
from keras.layers import Dense # notice that we don't import Input here...
model_seq = Sequential([
Dense(64, input_shape=(784,),activation='relu'),
Dense(64, activation='relu'),
Dense(10, activation='softmax')
])
model_seq.summary()
# result:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 64) 50240
_________________________________________________________________
dense_2 (Dense) (None, 64) 4160
_________________________________________________________________
dense_3 (Dense) (None, 10) 650
=================================================================
Total params: 55,050
Trainable params: 55,050
Non-trainable params: 0
_________________________________________________________________
Функциональный API
from keras.models import Model
from keras.layers import Input, Dense # explicitly import Input layer
inputs = Input(shape=(784,))
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
predictions = Dense(10, activation='softmax')(x)
model_func = Model(inputs=inputs, outputs=predictions)
model_func.summary()
# result:
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 784) 0
_________________________________________________________________
dense_1 (Dense) (None, 64) 50240
_________________________________________________________________
dense_2 (Dense) (None, 64) 4160
_________________________________________________________________
dense_3 (Dense) (None, 10) 650
=================================================================
Total params: 55,050
Trainable params: 55,050
Non-trainable params: 0
_________________________________________________________________
Эти две модели идентичны ;тот факт, что слой Input
не отображается явно в model.summary()
при использовании последовательного API, не означает ничего относительно функциональности модели.РЕДАКТИРОВАТЬ: Как правильно указывает Даниэль Мёллер в комментарии ниже, это даже не настоящий слой, который ничего не делает, кроме определения формы ввода (обратите внимание на его 0 параметров обучения в model_func.summary
выше).
Другими словами, не беспокойтесь ...
Эта тема также может быть полезна: Keras Последовательный входной слой модели