У меня есть модель Keras, и я обучил модель 100 эпохам.

Теперь я получил 0,0085 потерь в эпоху 85, а в конце эпохи я получил 0,0092.

Мой вопрос

  1. что сохраняет model.save () в Keras?
  2. Сохраняет ли он веса, которые он получил от эпохи широты (т. Е. 100)?
  3. Или это спасает вес от лучшей эпохи (то есть, эпоха 85)
  4. Или средние или средние веса из всех 100 эпох?

Что на самом деле keras model.save () предназначен для сохранения веса после завершения 100 эпох?

Спасибо за объяснение заранее :).

2
Venkata Sai Reddy Avuluri 9 Июл 2019 в 05:29

4 ответа

Лучший ответ
  1. Это экономит вес
  2. да
  3. Для сохранения весов для лучшей эпохи используйте кусок кода, который я дал ниже
  4. нет

Что на самом деле keras model.save () предназначен для сохранения веса после завершения 100 эпох? Да, это так, но взгляните на следующий код для сохранения весов только лучших эпох.

Используйте этот кусок кода для:

  1. Сохраняйте веса только в лучшие эпохи
  2. Обновлять веса после каждой эпохи, только если улучшены данные критерии (val_loss - min)
  3. Кроме того, история после каждой эпохи будет сохранена в файле .csv.

Код

import pandas as pd
from keras.callbacks import EarlyStopping, ModelCheckpoint

#Stop when val_loss is not decreasing
earlyStopping = EarlyStopping(monitor='val_loss', patience=10, verbose=0, mode='min')

#Save the model after every epoch.
checkpointer = ModelCheckpoint(filepath='Model_1_weights.h5', verbose=1, save_best_only=True)

#history variable will save training progress after each epoch 
history = model.fit(X_train, y_train, batch_size=20, epochs=40, validation_data=(X_valid, y_valid), shuffle=True, callbacks=[checkpointer, earlyStopping])
#Save progress of each epoch in .csv file 
hist_df = pd.DataFrame(history.history) 
hist_csv_file = 'History_Model_1.csv'
with open(hist_csv_file, mode='w') as f:
    hist_df.to_csv(f)

Ссылка: https://keras.io/callbacks/#ModelCheckpoint

1
Muhammad Hanif 9 Июл 2019 в 05:52

model.save() сохраняет всю архитектуру, веса и состояние оптимизатора. Эта команда сохраняет детали, необходимые для восстановления вашей модели.

Команда сохранит:

  • Архитектура модели, позволяющая воссоздать модель;
  • Вес модели;
  • Конфигурация обучения (проигрыш, оптимизатор);
  • состояние оптимизатора, позволяющее возобновить обучение именно с того места, где вы остановились.

Таким образом, вы можете повторно использовать вашу модель, используя keras.models.load_model(filepath) для повторного создания вашей модели. load_model также позаботится о компиляции модели с использованием сохраненной конфигурации обучения.

Смотрите пример:

from keras.models import load_model

model.save('my_model.h5')  # creates a HDF5 file 'my_model.h5'
del model  # deletes the existing model

# returns a compiled model
# identical to the previous one
model = load_model('my_model.h5')

Источник: https://keras.io / получение стартером / чаво / # как -могу - я - копи- а- keras - модели

2
Isac Moura 9 Июл 2019 в 02:46

Мой вопрос в том, что сохраняет model.save (): «Сохраняет ли он веса, полученные за последнюю эпоху (т. Е. 100)?» ИЛИ «Сохраняет ли веса с лучшей эпохи (т.е. эпохи 85)?» ИЛИ «Средние или средние веса из всех 100 эпох»?

Все, что сохраняется (вес, состояние оптимизатора и т. Д.), Уже упоминалось в других ответах. В вашем случае вес модели в конце 100 эпох сохраняется.

В случае, если вы хотите сохранить лучшую модель (с наименьшими потерями), вам нужно создать объект обратного вызова ModelCheckPoint и передать его методу fit() через аргумент callbacks ,

https://keras.io/callbacks/#ModelCheckpoint

https://keras.io/callbacks/#example-model-checkpoints

2
Manoj Mohan 9 Июл 2019 в 03:50

model.save() сохранит много деталей о вашем NN. Наиболее важные детали

  1. Архитектура сети, включая измерения (слои входов / выходов, скрытые слои и т. Д.).
  2. Матрицы весов для каждой скрытой единицы в каждом слое и функция активации. и многие другие детали, которые нам, возможно, не понадобятся здесь описывать.

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

Кроме того, число эпох не сохраняется, и это не имеет смысла в большинстве ситуаций, согласно Франсуа Шоле, создателю Keras. посмотреть этот разговор

Это верно, если вы не активируете опцию callback, которая включает раннюю остановку обучения вашей сети после определенного количества эпох (которые вы назвали лучшей итерацией). посмотрите это

2
Cs20 9 Июл 2019 в 03:13