如何解读Keras model.fit输出?

时间:2017-09-14 11:52:34

标签: keras

我刚刚开始使用Keras。我正在处理的示例有一个模型,下面的代码片段用于运行模型

from sklearn.preprocessing import LabelBinarizer
label_binarizer = LabelBinarizer()
y_one_hot = label_binarizer.fit_transform(y_train)

model.compile('adam', 'categorical_crossentropy', ['accuracy'])
history = model.fit(X_normalized, y_one_hot, nb_epoch=3, validation_split=0.2)

我收到以下回复:

Using TensorFlow backend. Train on 80 samples, validate on 20 samples Epoch 1/3

32/80 [===========>..................] - ETA: 0s - loss: 1.5831 - acc:
0.4062 80/80 [==============================] - 0s - loss: 1.3927 - acc:
0.4500 - val_loss: 0.7802 - val_acc: 0.8500 Epoch 2/3

32/80 [===========>..................] - ETA: 0s - loss: 0.9300 - acc:
0.7500 80/80 [==============================] - 0s - loss: 0.8490 - acc:
0.8000 - val_loss: 0.5772 - val_acc: 0.8500 Epoch 3/3

32/80 [===========>..................] - ETA: 0s - loss: 0.6397 - acc:
0.8750 64/80 [=======================>......] - ETA: 0s - loss: 0.6867 - acc:
0.7969 80/80 [==============================] - 0s - loss: 0.6638 - acc:
0.8000 - val_loss: 0.4294 - val_acc: 0.8500

documentation表示适合返回

  

历史记录实例。其历史属性包含所有信息   在培训期间收集。

有谁知道如何解释历史实例?

例如,32/80是什么意思?我假设80是样本数但是32是多少? ETA:0s ??

2 个答案:

答案 0 :(得分:6)

32是您的批量大小。如果您愿意,可以在拟合函数中更改默认值。

在第一批训练结束后,Keras估计了一个时期的训练持续时间(ETA:预计到达时间),相当于所有样本的一轮训练。

除此之外,您还可以获得培训和验证样本的损失(预测和真实标签之间的差异)和您的指标(在您的情况下是准确性)。

答案 1 :(得分:6)

@petezurich已经说过,ETA =预计到达时间。

80是您的培训集的大小,32/8064/80表示您的批量大小是32,当前是第一批(或第二批)分别处理)。

lossacc是指训练集的当前损失和准确性 。 在每个时期结束时,都会根据您的验证集对您训练有素的NN进行评估。这就是val_lossval_acc所指的。

model.fit()返回的历史记录对象是带有某些字段的简单类,例如对model,对params字典的引用,最重要的是对history字典的引用。它在每个时期的末尾存储lossacc(或任何其他使用的度量)的值。对于2个时期,它将看起来像这样:

{
    'val_loss': [16.11809539794922, 14.12947562917035],
    'val_acc': [0.0, 0.0],
    'loss': [14.890108108520508, 12.088571548461914],
    'acc': [0.0, 0.25]
}

如果您想visualize训练进度,这非常方便。

注意:如果您的验证损失/准确性开始增加而培训损失/准确性仍在减少,则表明过度拟合。

注意2:最后,您应该使用与训练集和验证集不同的测试集来测试您的NN,因此在训练过程中从未被触及过。