Это работает:
img = Input(shape=(224,224,3))
efnet = EfficientNetB0(
weights = 'noisy-student',
include_top = False,
pooling = None,
classes = None
)
for layer in efnet.layers:
layer.trainable = False
x = efnet(img)
# ... any number of layers ...
x = Dense(1)(x)
model = Model(inputs=img, outputs=x)
Это не так («График отключен»):
img = Input(shape=(224,224,3))
img = Dropout(0.2)(img)
# ^ "Preprocessing" could be anything, Dropout is a simple example
efnet = EfficientNetB0(
weights = 'noisy-student',
include_top = False,
pooling = None,
classes = None
)
for layer in efnet.layers:
layer.trainable = False
x = efnet(img)
# ... any number of layers ...
x = Dense(1)(x)
model = Model(inputs=img, outputs=x)
Единственное различие между ними заключается в «предварительной обработке». Почему это не работает, и как я могу поместить промежуточные слои между входом и «модель как слой», как показано выше?
(Указание input_shape и / или input_tensor в объявлении e fnet имеет никакого эффекта. Фактически, указание input_tensor таинственным образом приводит к тому, что веса e fnet не загружаются, потому что e fnet, очевидно, тогда имеет 131 слой (???) вместо ожидаемых 130.)