Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Keras Model.fit()显示模型验证进度_Python_Tensorflow_Keras - Fatal编程技术网

Python 使用Keras Model.fit()显示模型验证进度

Python 使用Keras Model.fit()显示模型验证进度,python,tensorflow,keras,Python,Tensorflow,Keras,我正在使用tf.keraspassing training and validation generators培训CNN模型,如下所示: model.fit( x=training_data_generator, validation_data=validation_data_generator, epochs=n_epochs, use_multiprocessing=False, max_queue_size=100, workers=50 )

我正在使用
tf.keras
passing training and validation generators培训CNN模型,如下所示:

model.fit(
    x=training_data_generator,
    validation_data=validation_data_generator,
    epochs=n_epochs,
    use_multiprocessing=False,
    max_queue_size=100,
    workers=50
)
生成器基于
tf.keras.Sequence

问题是,我的数据集很大。训练一个历元大约需要一天(尽管在两个Titan RTX GPU上训练),每个历元后的验证需要几个小时

在培训期间,我可以看到显示的进度,但在验证期间,我只看到培训进度条的最后一个快照:

130339/130340[==================================]-147432s 1s/步

直到验证完成,最后我看到我的验证准确度、损失等

是否有方法显示进度条以进行验证

我正在考虑这样做:

for epoch in range(n_epochs):
    model.fit(
        x=training_data_generator,
        epochs=1,
        use_multiprocessing=False,
        max_queue_size=100,
        workers=50
    )
    validation_results = model.evaluate(
        x=validation_data_generator,
        use_multiprocessing=False,
        max_queue_size=100,
        workers=50
    )
    print(validation_results)
我正在考虑的另一个选项是创建一个自定义回调,用于在端验证模型
,但这似乎非常不标准


有更好的方法吗?

您可以在fit方法上设置每个历元的步数。
基于:
在宣布一个历元结束并开始下一个历元之前的步骤总数(样本批次)。使用输入张量(如TensorFlow数据张量)进行训练时,
默认值None等于数据集中的样本数除以批次大小,如果无法确定,则为1。如果x是tf.data数据集,且“每历元的步骤数”为无,则历元将运行,直到输入数据集耗尽。数组输入不支持此参数。

通过这种方式,您可以限制每历元步长,因此将其设置为较低的值将立即为您提供每历元的验证损失和准确性 通过将每个历元的步长设置为较低的大小,意味着您需要增加历元。

每1000个步骤或历元,它将向您显示完成1000个步骤后的培训和验证损失和准确性,而不是先耗尽整个数据集,然后显示结果。

history = model.fit(x_train, y_train,
                    batch_size=2,
                    epochs=30,
                    steps_per_epoch=1000,
                    # We pass some validation for
                    # monitoring validation loss and metrics
                    # at the end of each epoch
                    validation_data=(x_val, y_val)) 

恐怕我唯一能建议的是将
initial\u epoch=epoch+1
添加到您的
model.fit()
(如果您登录到Tensorboard,这一点特别有用)。如果我们只需要一个进度条,而不需要更改每个epoch的步骤?我不明白为什么在TF2.1中有用于培训而不是验证的进度条。请记住在调用fit时将verbose设置为1。从文档中:0=静默,1=进度条,2=每个历元一行。请注意,进度条在登录到文件时并不特别有用,因此建议在不以交互方式运行(例如,在生产环境中)时使用verbose=2。