我知道在Keras中,model.fit
会返回一个callbacks.History对象,我们可以从中获取损失和其他指标,方法如下。
...train_history = model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch, verbose=1, validation_data=(X_test, Y_test))loss = train_history.history['loss']val_loss = train_history.history['val_loss']
然而,在我的新实验中,我使用了交叉验证
和kerasclassifier
来处理Keras模型(完整示例代码:https://chrisalbon.com/deep_learning/keras/k-fold_cross-validating_neural_networks/)
# 包装Keras模型以便scikit-learn可以使用neural_network = KerasClassifier(build_fn=create_network, epochs=10, batch_size=100, verbose=1)
由于现在我在使用交叉验证,我不确定如何获取训练和验证损失。
回答:
正如文档中明确提到的,cross_val_score
包含一个scoring
参数,它是
类似于
cross_validate
,但只允许单一指标。
因此它不能用于返回Keras model.fit()
的所有损失和指标信息。
Keras的scikit-learn包装器旨在提供便利,前提是你对底层细节(如训练和验证损失及准确率)不感兴趣。如果情况并非如此,你应该回归到直接使用Keras。以下是如何使用你所链接的示例和我的这个回答中的元素来实现这一点:
之后,例如loss
将是:
[[0.7251979386058971, 0.6640552306833333, 0.6190941931069023, 0.5602273066015956, 0.48771809028534785, 0.40796665995284814, 0.33154681897220617, 0.2698465999525444, 0.227492357244586, 0.1998490962115201], [0.7109123742507104, 0.674812126485093, 0.6452083222258479, 0.6074533335751673, 0.5627432800365635, 0.51291748379345, 0.45645068427406726, 0.3928780094229408, 0.3282097149542538, 0.26993170230619656], [0.7191790426458682, 0.6618405645963258, 0.6253172250296091, 0.5855853647883192, 0.5438901918195831, 0.4999895181964501, 0.4495182811042725, 0.3896359298090465, 0.3210068798340545, 0.25932698793518183]]
即一个包含n_splits
个列表的列表(这里是3个),每个列表包含每个epoch的训练损失(这里是10个)。其他列表的情况类似…