Ani*_*hah 38 python machine-learning keras
当我将整个数据集加载到内存中并使用以下代码在Keras中训练网络时:
model.fit(X, y, nb_epoch=40, batch_size=32, validation_split=0.2, verbose=1)
Run Code Online (Sandbox Code Playgroud)
这会在每个时期生成一个进度条,其中包含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)
Run Code Online (Sandbox Code Playgroud)
这将为每个批次而不是每个时期生成进度条.是否可以在批量培训期间为每个时期生成进度条?
Abh*_*yal 55
1.
model.fit(X, y, nb_epoch=40, batch_size=32, validation_split=0.2, verbose=1)
Run Code Online (Sandbox Code Playgroud)
在上面的更改中verbose=2,正如文档中提到的那样:"verbose: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
.....
.....
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
输出如下:
[================================================= ===========] 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])
Run Code Online (Sandbox Code Playgroud)
虽然,我以前从未尝试过.上面的例子来自于这个keras github问题:显示亏损每N批#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))
Run Code Online (Sandbox Code Playgroud)
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)])
Run Code Online (Sandbox Code Playgroud)
cas*_*dcl 18
tqdm(版本 >= 4.41.0)还刚刚添加了内置支持,keras因此您可以执行以下操作:
from tqdm.keras import TqdmCallback
...
model.fit(..., verbose=0, callbacks=[TqdmCallback(verbose=2)])
Run Code Online (Sandbox Code Playgroud)
这会关闭keras' progress ( verbose=0),tqdm而是使用。对于回调,verbose=2意味着 epochs 和 batches 的单独进度条。1表示完成后清除批处理条。0表示只显示纪元(从不显示批次条)。
| 归档时间: |
|
| 查看次数: |
33193 次 |
| 最近记录: |