Keras中验证模型时,verbose的作用是什么?

170

我第一次运行LSTM模型。 这是我的模型:

opt = Adam(0.002)
inp = Input(...)
print(inp)
x = Embedding(....)(inp)
x = LSTM(...)(x)
x = BatchNormalization()(x)
pred = Dense(5,activation='softmax')(x)

model = Model(inp,pred)
model.compile(....)

idx = np.random.permutation(X_train.shape[0])
model.fit(X_train[idx], y_train[idx], nb_epoch=1, batch_size=128, verbose=1)

训练模型时 verbose 参数有什么用?

6个回答

368

在此处查看model.fit的文档here

通过设置verbose为0,1或2,您可以选择如何查看每个时期的训练进度。

verbose=0不会显示任何内容(无声)

verbose=1将为您显示动画进度条,如下所示:

progres_bar

verbose=2将仅提到每个时期的编号,如下所示:

enter image description here


49
整数。0、1或2。冗长模式。0 = 静默、1 = 进度条、2 = 每个时期一行。 - rakesh
2
这个评论是对问题的最佳回答,甚至比被评论的回答更好。请注意这一点,尽量避免为了让回答变长而使用无意义的词语。@rakesh,你很棒。 - Konstantin Sekeresh

47

verbose: 整数。0、1或2。详细模式。

Verbose=0(无输出)

Verbose=1(进度条)

Train on 186219 samples, validate on 20691 samples
Epoch 1/2
186219/186219 [==============================] - 85s 455us/step - loss: 0.5815 - acc: 
0.7728 - val_loss: 0.4917 - val_acc: 0.8029
Train on 186219 samples, validate on 20691 samples
Epoch 2/2
186219/186219 [==============================] - 84s 451us/step - loss: 0.4921 - acc: 
0.8071 - val_loss: 0.4617 - val_acc: 0.8168

详细程度=2(每个时期一行)

Train on 186219 samples, validate on 20691 samples
Epoch 1/1
 - 88s - loss: 0.5746 - acc: 0.7753 - val_loss: 0.4816 - val_acc: 0.8075
Train on 186219 samples, validate on 20691 samples
Epoch 1/1
 - 88s - loss: 0.4880 - acc: 0.8076 - val_loss: 0.5199 - val_acc: 0.8046

你能解释一下为什么对于不同的 verbose 值,我没有得到期望的输出吗?对于我的文件来说,verbose = 0 和 2 都给出相同的 [silent] 输出。而对于 verbose = 1,我只在 epoch 结束时获得进度条,如 Epoch 10/10 - 21s - loss: 0.2354 - acc: 0.9286 - val_loss: 0.2206 - val_acc: 0.9344 [==============================] 准确率:0.9344 错误率:6.560000000000002。 - Dr Nisha Arora
很棒的答案,帮助了我。适用于tensorflow 2.2。 - Bobs Burgers

13

对于 verbose > 0,fit 方法记录如下:

  • 损失:训练数据的损失函数值
  • 准确率:训练数据的准确性值。

注意:如果使用正则化机制,则会启用它们以避免过拟合。

如果未使用空的 validation_datavalidation_split 参数,则 fit 方法记录以下内容:

  • val_loss:验证数据的损失函数值
  • val_acc:验证数据的准确性值

注意:在测试时关闭正则化机制,因为我们正在使用网络的所有功能。

例如,在训练模型时使用 verbose 可以帮助检测过拟合,如果你的 acc 持续改善但是你的 val_acc 变得更糟,则说明出现了过拟合。


正则化与冗余参数有什么相关性?! - Chrisji
1
Verbose参数对正则化机制没有影响。我只是添加了一些关于启用verbose时显示的信息(以回答最初的问题“在训练模型时verbose有什么用处?”=>例如:通过比较acc和val_acc来避免过拟合)。 - Hugo Bevilacqua

12

verbose是控制神经网络训练过程中输出显示的选项。

如果将verbose设置为0,则不会显示任何内容。

如果将verbose设置为1,则会显示以下输出: Epoch 1/200 55/55[==============================] - 10s 307ms/step - loss: 0.56 - accuracy: 0.4949

如果将verbose设置为2,则输出将如下所示: Epoch 1/200 Epoch 2/200 Epoch 3/200


7

默认情况下,verbose = 1,

verbose = 1,包括进度条和每个epoch一行的输出。

verbose = 0,表示静默模式。

verbose = 2,每个epoch输出一行,即当前epoch编号/总共的epochs数目。


5

使用 verbose 标志提供的详细信息顺序如下:

较少的细节... 更多的细节

0 < 2 < 1

默认值为 1

对于生产环境,建议选择 2


1
你的回答中最后一条信息是最好的,我想说。 - akshit bhatia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接