可视化交叉验证模型拟合的方法

时间:2019-11-19 13:55:53

标签: python keras cross-validation data-augmentation

在使用交叉验证时,我该如何编写代码以可视化我的准确性和损失发展在训练中的进度?通常,在训练模型时,我会为拟合函数分配变量名称“ history”,但是在交叉验证的情况下,它不会显示验证曲线。我以为是这种情况,因为我没有在fit函数(下面)中调用validation_data。

kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=seed)
cvscores = []
for train, test in kfold.split(x_train, y_train):
   model = Sequential()
   model.add(layers.Conv2D(32,(4,4), activation = 'relu', input_shape = (224,224,3)))
   model.add(layers.MaxPooling2D((2, 2)))
   model.add(layers.Conv2D(64, (4,4), activation = 'relu'))
   model.add(layers.MaxPooling2D((2, 2)))
   model.add(layers.Flatten())
   model.add(layers.Dense(64, activation = 'relu'))
   model.add(layers.Dropout(0.5))
   model.add(layers.Dense(1, activation = 'sigmoid'))
	 
   model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
	
   history = model.fit(x_train[train], y_train[train], epochs=15, batch_size=64)
	
   scores = model.evaluate(x_train[test], y_train[test], verbose=0)
   print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
   cvscores.append(scores[1] * 100)
print("%.2f%% (+/- %.2f%%)" % (np.mean(cvscores), np.std(cvscores)))

通常我将使用以下代码,但是由于我没有合适的验证数据,因此我不确定如何处理它。

plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'val'], loc='upper left')
plt.show()

plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'val'], loc='upper left')
plt.show()

] 1] 1

1 个答案:

答案 0 :(得分:0)

您可以使用TensorBoard转储所有内容。通常,您进行以下拆分:训练,测试,验证。您可以使用第三个拆分来验证模型。您可以使用sklearn中的指标。大多数情况下,人们不会交叉验证其DNN模型,因为这会花费太多时间。但是,一旦有了这些模型,最好使用一些boxplot来绘制度量分布。

相关问题