Как поместить слои между входным слоем и «Модель как слой»? - PullRequest
0 голосов
/ 22 апреля 2020

Это работает:

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.)

1 Ответ

0 голосов
/ 25 апреля 2020

Я нашел исправление для проблемы, хотя я не знаю, почему исправление имеет какое-либо значение.

Это работает:

img = Input(shape=(224,224,3))
x = Dropout(0.2)(img)
x = efnet(x) 
x = Dense(1)(x)
model = Model(inputs=img, outputs=x)

Это не:

img = Input(shape=(224,224,3))
img = Dropout(0.2)(img)
x = efnet(img) 
x = Dense(1)(x)
model = Model(inputs=img, outputs=x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...