简体   繁体   English

从已保存的 .h5 cnn 保存模型加载 val_acc 和 val_loss

[英]Loading val_acc and val_loss from a saved .h5 cnn saved model

I have built a CNN classifier using Keras, plot the history of the validation accuracy and validation loss over 3 epochs and then saved the model using classifier.save("name.h5:).我使用 Keras 构建了一个 CNN 分类器,绘制了超过 3 个时期的验证准确性和验证损失的历史记录,然后使用分类器.save("name.h5:) 保存了模型。

I have loaded the classifier with .load() command successfully later on.稍后我已经成功地使用 .load() 命令加载了分类器。 However, I cannot reload the validation accuraccy and validation loss.但是,我无法重新加载验证准确性和验证损失。 Is there any way to do it?有什么办法吗?

I tried evaluate() function but no use.我试过评估()函数但没有用。

from keras.models import Sequential
from keras.layers import Conv2D,Activation,MaxPooling2D,Dense,Flatten,Dropout
import numpy as np
from keras.preprocessing.image import ImageDataGenerator
from IPython.display import display
import matplotlib.pyplot as plt
from PIL import Image
from keras.models import load_model
from sklearn.metrics import classification_report, confusion_matrix

classifier = Sequential()
classifier.add(Conv2D(32,(3,3),input_shape=(64,64,3)))
classifier.add(Activation('relu'))
classifier.add(MaxPooling2D(pool_size =(2,2)))
classifier.add(Conv2D(32,(3,3)))
classifier.add(Activation('relu'))
classifier.add(MaxPooling2D(pool_size =(2,2)))
classifier.add(Conv2D(64,(3,3)))
classifier.add(Activation('relu'))
classifier.add(MaxPooling2D(pool_size =(2,2)))
classifier.add(Flatten())
classifier.add(Dense(64))
classifier.add(Activation('relu'))
classifier.add(Dropout(0.5))
classifier.add(Dense(2))
classifier.add(Activation('softmax'))
classifier.summary()
classifier.compile(optimizer ='rmsprop',
                   loss ='categorical_crossentropy',
                   metrics =['accuracy'])
train_datagen = ImageDataGenerator(rescale =1./255,
                                   shear_range =0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip =True)
test_datagen = ImageDataGenerator(rescale = 1./255)

batchsize=60
training_set = train_datagen.flow_from_directory('/home/osboxes/Downloads/Downloads/dogs-vs-cats/train/',
                                                target_size=(64,64),
                                                batch_size= batchsize,
                                                class_mode='categorical')

test_set = test_datagen.flow_from_directory('/home/osboxes/Downloads/Downloads/dogs-vs-cats/test/',
                                           target_size = (64,64),
                                           batch_size = batchsize,
                       shuffle=False,
                                           class_mode ='categorical')
history=classifier.fit_generator(training_set,
                        steps_per_epoch =9000 // batchsize,
                        epochs = 3,
                        validation_data =test_set,
                        validation_steps = 4500 // batchsize)

classifier.save('my_model3.h5')
Y_pred = classifier.predict_generator(test_set, steps=4500 // batchsize)
y_pred = np.argmax(Y_pred, axis=1)
print('Confusion Matrix')
print(confusion_matrix(test_set.classes, y_pred))
print('Classification Report')
target_names = test_set.classes
class_labels = list(test_set.class_indices.keys()) 
target_names = ['cats', 'dogs'] 
report = classification_report(test_set.classes, y_pred, target_names=class_labels)
print(report) 

# summarize history for accuracy
#plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['test'], loc='upper left')
plt.show()
# summarize history for loss
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()

I am afraid not, History is an object that gets return as a product of the fit() function.恐怕不是,History 是一个作为 fit() 函数的产品返回的对象。 The model itself doesn't keep this information and thus is not saved.模型本身不保留此信息,因此不会保存。

The only way you could have gotten the History back is if you would have saved it specially.您可以恢复历史记录的唯一方法是您是否特别保存了它。

Otherwise, you might also get the same result(History) if when you first trained your model you set a random seed.否则,如果您在第一次训练模型时设置了一个随机种子,您也可能会得到相同的结果(历史)。 Then you can repeat the process with the same seed and get the same result.然后您可以使用相同的种子重复该过程并获得相同的结果。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM