Keras - отлаженная модель VGG дает неверные прогнозы - PullRequest
0 голосов
/ 20 мая 2018

У меня есть этот код:

base = VGG16(weights='imagenet', include_top=False, input_shape=(64,64,3))

# convert to sequential model
model = Sequential()
for layer in base.layers:
    model.add(layer)

# Remove last layer
model.layers.pop()

# add flatten and two dense layers that don't appear when specifying an input_shape
model.add(Flatten())
model.add(Dense(4096))
model.add(Dropout(.5))
model.add(Dense(4096))
model.add(Dropout(.5))

for layer in model.layers:
    layer.trainable = False

# Add a layer for 3 classes
model.add(Dense(3, activation='softmax'))

model.compile(
    optimizer = 'rmsprop',
    loss='categorical_crossentropy',
    metrics=['accuracy']
)

# training
model.fit(x_train,y_train, epochs=30, batch_size=64, verbose=1)

# predict
y_target = model.predict(x_target, batch_size=64, verbose=1)

Кажется, я не могу понять, почему он дает мне такую ​​низкую точность и плохие прогнозы.Может ли кто-нибудь объяснить это мне?Я использую Tensorflow.

1 Ответ

0 голосов
/ 21 мая 2018

Ваша модель, как она есть , не изучает вообще.

Вы используете VGG16 предварительно обученную модель, меняющую верхние слои новыми слоями, чтобы ваша модель выучила новые классы, но позже вы делаете все слои непригодными для обучения.Таким образом, ваши новые плотные слои всегда будут содержать случайные веса, как их инициализация, и ваша модель никогда не будет учиться.

Если вы хотите, чтобы ваши веса VGG16 были заблокированы, и для точной настройки вашей модели, вам следует переместить код весов ваших стоп-слоев до , добавив новые слои, например:

#Moved here
for layer in model.layers:
    layer.trainable = False

# add flatten and two dense layers that don't appear when specifying an input_shape
model.add(Flatten())
model.add(Dense(4096))
model.add(Dropout(.5))
model.add(Dense(4096))
model.add(Dropout(.5))
...

Имейте в виду, что ваша модель может иметь лучшие результаты, не замораживая слои.Для этого просто оставьте все свои слои обучаемыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...