Moc*_*ird 5 python neural-network deep-learning keras tensorflow
我在训练神经网络批次与Keras 2.0包Python.以下是有关数据和培训参数的一些信息:
以下是以下代码的一些日志:
for i in range(epochs):
print("train_model:: starting epoch {0}/{1}".format(i + 1, epochs))
model.fit_generator(generator=batch_generator(data_train, target_train, batch_size),
steps_per_epoch=num_of_batches,
epochs=1,
verbose=1)
Run Code Online (Sandbox Code Playgroud)
(部分)日志:
train_model:: starting epoch 1/3
Epoch 1/1
1/406 [..............................] - ETA: 11726s - loss: 0.7993 - acc: 0.5996
2/406 [..............................] - ETA: 11237s - loss: 0.7260 - acc: 0.6587
3/406 [..............................] - ETA: 14136s - loss: 0.6619 - acc: 0.7279
404/406 [============================>.] - ETA: 53s - loss: 0.3542 - acc: 0.8917
405/406 [============================>.] - ETA: 26s - loss: 0.3541 - acc: 0.8917
406/406 [==============================] - 10798s - loss: 0.3539 - acc: 0.8918
train_model:: starting epoch 2/3
Epoch 1/1
1/406 [..............................] - ETA: 15158s - loss: 0.2152 - acc: 0.9424
2/406 [..............................] - ETA: 14774s - loss: 0.2109 - acc: 0.9419
3/406 [..............................] - ETA: 16132s - loss: 0.2097 - acc: 0.9408
404/406 [============================>.] - ETA: 64s - loss: 0.2225 - acc: 0.9329
405/406 [============================>.] - ETA: 32s - loss: 0.2225 - acc: 0.9329
406/406 [==============================] - 13127s - loss: 0.2225 - acc: 0.9329
train_model:: starting epoch 3/3
Epoch 1/1
1/406 [..............................] - ETA: 22631s - loss: 0.1145 - acc: 0.9756
2/406 [..............................] - ETA: 24469s - loss: 0.1220 - acc: 0.9688
3/406 [..............................] - ETA: 23475s - loss: 0.1202 - acc: 0.9691
404/406 [============================>.] - ETA: 60s - loss: 0.1006 - acc: 0.9745
405/406 [============================>.] - ETA: 31s - loss: 0.1006 - acc: 0.9745
406/406 [==============================] - 11147s - loss: 0.1006 - acc: 0.9745
Run Code Online (Sandbox Code Playgroud)
我的问题是:在每个时代之后会发生什么改善这样的准确性?例如,第一个时期结束时的准确度是0.8918,但是在第二个时期的开始时观察到0.9424的准确度.同样,第二纪元末期的准确度为0.9329,但第三纪元的精确度为0.9756.
我期望在第二纪元开始时找到~0.8918的准确度,在第三纪元开始时找到~0.9329.
我知道在每批中,批次中有一个正向通道和一个向后通过的训练样本.因此,在每个时期中,存在所有训练样本的一个前向传递和一个后向传递.
另外,来自Keras文档:
Epoch: an arbitrary cutoff, generally defined as "one pass over the entire dataset", used to separate training into distinct phases, which is useful for logging and periodic evaluation.
为什么每个时期内的准确度提高小于时代X结束和时代X + 1开始之间的准确度提高?
这与您的模型或数据集无关; 这种"跳跃"的原因在于如何在Keras中计算和显示指标.
由于Keras一批又一批地处理,它可以节省每一个的准确性,它显示给您的不是最新处理批次的准确性,而是当前时期所有批次的平均值.而且,随着模型的培养,连续批次的准确性趋于提高.
现在考虑:在第一个时代,比方说,有50个批次,在这50个批次中,网络从0%到90%.然后在时代结束时,Keras将显示精确度,例如(0 + 0.1 + 0.5 + ... + 90) / 50%,这显然远低于90%!但是,因为你的实际精确度是90%,第二个时代的第一批将显示90%,给人的印象是质量突然"跳跃".显然,这同样适用于loss任何其他指标.
现在,如果您想要更准确,可靠地计算准确性,丢失或您可能发现自己使用的任何其他指标,我建议使用validation_data参数model.fit[_generator]来提供验证数据,这些数据不会用于培训,但仅用于在每个时代结束时评估网络,而不是在各个时间点上进行平均.
| 归档时间: |
|
| 查看次数: |
2406 次 |
| 最近记录: |