Как мы можем построить графики точности и потерь из модели Keras, сохраненной ранее? - PullRequest
0 голосов
/ 23 июня 2018

Есть ли способ построения графиков точности и потерь из модели CNN, сохраненной ранее?Или мы можем строить графики только во время обучения и оценки модели?

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(_NUM_CLASSES, activation='softmax'))
model.compile(optimizer='rmsprop', loss='categorical_crossentropy',metrics= 
              ["accuracy"])
model.fit(x_train, y_train,
          batch_size=_BATCH_SIZE,
          epochs=_EPOCHS,
          verbose=1,
          validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
model.save('model.h5')

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Ни одна из доступных опций для сохранения моделей в Keras не включает историю тренировок , что именно то, что вы просите здесь.Чтобы сохранить эту историю доступной, вы должны внести некоторые тривиальные изменения в свой обучающий код, чтобы сохранить его отдельно;Вот воспроизводимый пример, основанный на примере Keras MNIST и только 3 обучающих эпох:

hist = model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=3,
          verbose=1,
          validation_data=(x_test, y_test))

hist является обратным вызовом Keras и включает в себя словарь history, которыйсодержит метрики, которые вы ищете:

hist.history
# result:
{'acc': [0.9234666666348775, 0.9744000000317892, 0.9805999999682109],
 'loss': [0.249011807457606, 0.08651042315363884, 0.06568188704450925],
 'val_acc': [0.9799, 0.9843, 0.9876],
 'val_loss': [0.06219216037504375, 0.04431889447008725, 0.03649089169385843]}

т.е. метрики обучения и проверки (здесь потери и точность) для каждой из эпох обучения (здесь 3).

Теперь этотривиально сохранить этот словарь с помощью Pickle и восстановить его по мере необходимости:

import pickle

# save:
f = open('history.pckl', 'wb')
pickle.dump(hist.history, f)
f.close()

# retrieve:    
f = open('history.pckl', 'rb')
history = pickle.load(f)
f.close()

Простая проверка здесь подтверждает, что исходная и извлеченные переменные действительно идентичны:

hist.history == history
# True
0 голосов
/ 23 июня 2018

Это зависит от того, как вы сохранили модель.

В общем случае есть два случая: первый сохраняет и загружает всю модель (включая архитектуру и весовые коэффициенты):

from keras.models import load_model

model.save('my_model.h5')  # creates a HDF5 file 'my_model.h5'
...
model = load_model('my_model.h5')

Второй сохраняет только весовые коэффициенты:

def create_model():
   model = Sequential() 
   # ... creating the model exactly as it was defined in the training time

# You must create the model since loading only the weights
model = create_model()
model.load_weights('my_model_weights.h5')

Подробнее см. Документация Keras

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