当前位置: 首页 > 面试题库 >

在Keras中分批训练期间显示每个时期的进度条

楚畅
2023-03-14
问题内容

当我将整个数据集加载到内存中并使用以下代码在Keras中训练网络时:

model.fit(X, y, nb_epoch=40, batch_size=32, validation_split=0.2, verbose=1)

这会在每个时期生成带有ETA,准确性,损失等指标的进度条

当我分批训练网络时,我正在使用以下代码

for e in range(40):
        for X, y in data.next_batch():
            model.fit(X, y, nb_epoch=1, batch_size=data.batch_size, verbose=1)

这将为每个批次而不是每个时期生成一个进度条。在分批训练期间是否可以为每个时期生成进度条?


问题答案:

1。

model.fit(X, y, nb_epoch=40, batch_size=32, validation_split=0.2, verbose=1)

在上述对的更改中verbose=2,如文档中所述:“详细:0表示不记录到stdout,1表示进度条记录,” 2 for one log line per epoch

它将输出显示为:

Epoch 1/100
0s - loss: 0.2506 - acc: 0.5750 - val_loss: 0.2501 - val_acc: 0.3750
Epoch 2/100
0s - loss: 0.2487 - acc: 0.6250 - val_loss: 0.2498 - val_acc: 0.6250
Epoch 3/100
0s - loss: 0.2495 - acc: 0.5750 - val_loss: 0.2496 - val_acc: 0.6250
.....
.....

2。

如果要显示进度条以完成纪元,请保留verbose=0(关闭记录到stdout的日志)并以以下方式实现:

from time import sleep
import sys

epochs = 10

for e in range(epochs):
    sys.stdout.write('\r')

    for X, y in data.next_batch():
        model.fit(X, y, nb_epoch=1, batch_size=data.batch_size, verbose=0)

    # print loss and accuracy

    # the exact output you're looking for:
    sys.stdout.write("[%-60s] %d%%" % ('='*(60*(e+1)/10), (100*(e+1)/10)))
    sys.stdout.flush()
    sys.stdout.write(", epoch %d"% (e+1))
    sys.stdout.flush()

输出将如下所示:

[================================================= ===========] 100%,纪元10

3。

如果要每n个批次显示一次损失,可以使用:

out_batch = NBatchLogger(display=1000)
model.fit([X_train_aux,X_train_main],Y_train,batch_size=128,callbacks=[out_batch])

不过,我以前从未尝试过。上面的示例来自于这个keras github问题:Show Loss N N
Batchs#2850

您还可以在NBatchLogger此处进行演示:

class NBatchLogger(Callback):
    def __init__(self, display):
        self.seen = 0
        self.display = display

    def on_batch_end(self, batch, logs={}):
        self.seen += logs.get('size', 0)
        if self.seen % self.display == 0:
            metrics_log = ''
            for k in self.params['metrics']:
                if k in logs:
                    val = logs[k]
                    if abs(val) > 1e-3:
                        metrics_log += ' - %s: %.4f' % (k, val)
                    else:
                        metrics_log += ' - %s: %.4e' % (k, val)
            print('{}/{} ... {}'.format(self.seen,
                                        self.params['samples'],
                                        metrics_log))

4。

您也可以使用progbar进度,但它会分批打印进度

from keras.utils import generic_utils

progbar = generic_utils.Progbar(X_train.shape[0])

for X_batch, Y_batch in datagen.flow(X_train, Y_train):
    loss, acc = model_test.train([X_batch]*2, Y_batch, accuracy=True)
    progbar.add(X_batch.shape[0], values=[("train loss", loss), ("acc", acc)])


 类似资料:
  • 浏览训练视图 在训练期间您可利用向上/向下按钮浏览训练视图。请注意,可显示的训练视图与信息取决于您所选择的运动和您对所选运动内容的编辑。 在手表 Polar Flow 应用和网络服务中,您可添加运动内容以及针对每项运动内容进行具体设置。您可以为各项运动创建自定义训练视图,并选择训练期间想要看到的数据。有关更多信息,请参见 Flow 中的运动内容。 例如,训练视图可以显示以下信息: Your hea

  • 浏览训练视图 在训练期间您可利用向上/向下按钮浏览训练视图。请注意,可显示的训练视图与信息取决于您所选择的运动和您对所选运动内容的编辑。 在手表 Polar Flow 应用和网络服务中,您可添加运动内容以及针对每项运动内容进行具体设置。您可以为各项运动创建自定义训练视图,并选择训练期间想要看到的数据。有关更多信息,请参见 Flow 中的运动内容。 例如,训练视图可以显示以下信息: Your hea

  • 训练视图 您可以通过手腕姿势来启动显示屏并通过上下滑动显示屏来浏览训练视图.显示屏自动关闭以节约电池电量。在训练模式期间,您可以设置不关闭显示屏:通过轻触并按住触摸屏,直到您看到一个灯泡关闭图标。若要关闭此功能,请轻触并再次按住触摸屏,直到您看到一个灯泡关闭图标。 您可以看到以下训练视图。 有心率显示的训练 以当前心率区的颜色显示的当前心率。 到目前为止您的训练的时长。 当日时间。 到目前为止在训

  • 训练视图 您可以通过向上/向下按钮浏览训练视图。您可以看到以下训练视图。 有心率显示的训练 您的当前心率 到目前为止您的训练的时长。 您的当前心率 图表中的数字 130 显示 EnergyPointer 的内容, EnergyPointer 是个人化转折点,在该转折点您的训练的主要作用从燃烧脂肪转为提高健康水平。心形符号告诉您,您是在燃烧脂肪还是在提高健康水平。在图表中,该符号位于左侧,表示您正在

  • 问题内容: 我正在尝试显示时间戳记- 我尝试了不同的查询方式,并且还尝试将用作值。似乎没有任何作用。我的目的是让该应用显示以前的素数和它们被发现的时间。该应用程序的初衷是让用户能够关闭/杀死该应用程序,并在重新启动该应用程序时从上次找到的素数恢复计数。如果您有任何暗示,我也将不胜感激。 这是PrimeDBManager类 头等舱 最后是MainActivity类 问题答案: 好的,既然您上传了项目

  • 最初,我在这里找到了一个倒计时问题的部分答案 (“cymen”谢谢你的回答!) 如何防止倒计时在剩余时间内使用小数? 还有,如何使倒计时只表示一分钟内还剩几秒,一小时内还剩几分钟,等等,就像在这个网站上,恰好有我要倒计时的确切日期和时间.... http://50onfire.com/dc/一样。 http://50onfire.com/dc/ 以下是我将Cymen的代码编辑为: http://j