Обратные вызовы Keras пропускают сохранение контрольных точек, утверждая, что val_acc отсутствует - PullRequest
0 голосов
/ 12 октября 2018

Я запущу несколько больших моделей и хочу попробовать промежуточные результаты.

Поэтому я стараюсь использовать контрольные точки для сохранения лучшей модели после каждой эпохи.

Это мой код:

model = Sequential()
model.add(LSTM(700, input_shape=(X_modified.shape[1], X_modified.shape[2]), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(700, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(700))
model.add(Dropout(0.2))
model.add(Dense(Y_modified.shape[1], activation='softmax'))

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

# Save the checkpoint in the /output folder
filepath = "output/text-gen-best.hdf5"

# Keep only a single checkpoint, the best over test accuracy.
checkpoint = ModelCheckpoint(filepath,
                            monitor='val_acc',
                            verbose=1,
                            save_best_only=True,
                            mode='max')
model.fit(X_modified, Y_modified, epochs=100, batch_size=50, callbacks=[checkpoint])

Но я все еще получаю предупреждение после первой эпохи:

/usr/local/lib/python3.6/site-packages/keras/callbacks.py:432: RuntimeWarning: Can save best model only with val_acc available, skipping.
  'skipping.' % (self.monitor), RuntimeWarning)

Чтобы добавить metrics=['accuracy'] к модели, было в других вопросах SO (например, Невозможносохранить веса при использовании предварительно обученной модели VGG16 ) решение, но здесь ошибка все еще остается.

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Вы пытаетесь установить контрольную точку модели, используя следующий код

# Save the checkpoint in the /output folder
filepath = "output/text-gen-best.hdf5"

# Keep only a single checkpoint, the best over test accuracy.
checkpoint = ModelCheckpoint(filepath,
                            monitor='val_acc',
                            verbose=1,
                            save_best_only=True,
                            mode='max')

ModelCheckpoint рассмотрит аргумент monitor, чтобы принять решение о сохранении модели или нет.В вашем коде это val_acc.Таким образом, он сохранит веса, если будет val_acc.

Теперь в вашем коде соответствия,

model.fit(X_modified, Y_modified, epochs=100, batch_size=50, callbacks=[checkpoint])

вы не предоставили никаких данных проверки.ModelCheckpoint не может сохранить весовые коэффициенты, потому что у него нет аргумента monitor для проверки.

Для проверки наведения на основе val_acc вы должны предоставить некоторые данные проверки, подобные этой.

model.fit(X_modified, Y_modified, validation_data=(X_valid, y_valid), epochs=100, batch_size=50, callbacks=[checkpoint])

Если вы не хотите использовать данные проверки по какой-либо причине и применять указание проверки, вы должны изменить ModelCheckpoint на работу, основанную на acc или loss, как это

# Save the checkpoint in the /output folder
filepath = "output/text-gen-best.hdf5"

# Keep only a single checkpoint, the best over test accuracy.
checkpoint = ModelCheckpoint(filepath,
                            monitor='acc',
                            verbose=1,
                            save_best_only=True,
                            mode='max')

Имейте в виду, что вы должны изменить mode на min, если вы собираетесь monitor loss

0 голосов
/ 12 октября 2018

Отсутствует не потому, что отсутствует метрика, а потому, что у вас нет проверочных данных.Добавьте немного через параметр validation_data в fit или используйте validation_split.

...