有没有办法从之前保存的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')
Run Code Online (Sandbox Code Playgroud)
在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))
Run Code Online (Sandbox Code Playgroud)
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]}
Run Code Online (Sandbox Code Playgroud)
即针对每个训练时期(此处为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()
Run Code Online (Sandbox Code Playgroud)
此处的简单检查确认原始变量和检索到的变量确实相同:
hist.history == history
# True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2747 次 |
| 最近记录: |