达到输出大小限制后,缓冲数据被截断

Posted

技术标签:

【中文标题】达到输出大小限制后,缓冲数据被截断【英文标题】:Buffered data was truncated after reaching the output size limit 【发布时间】:2018-12-29 23:54:21 【问题描述】:

当我使用 Colaboratory 运行我的 NIN 模型时,它在训练过程的输出中出现错误,提示“缓冲数据在达到输出大小限制后被截断”。在第 61 个时代。我不知道这次崩溃。我的代码还在运行吗?我该如何解决这个问题?

以下是关于我的训练过程输出的一些信息:

Epoch 57/200
391/391 [==============================] - 53s 135ms/step - loss: 0.8365 - acc: 0.7784 - val_loss: 0.9250 - val_acc: 0.7625
Epoch 58/200
 28/391 [=>............................] - ETA: 46s - loss: 0.8356 - acc: 0.7835391/391 [==============================] - 53s 136ms/step - loss: 0.8288 - acc: 0.7811 - val_loss: 0.8977 - val_acc: 0.7608
Epoch 59/200
326/391 [========================>.....] - ETA: 8s - loss: 0.8309 - acc: 0.7789391/391 [==============================] - 53s 136ms/step - loss: 0.8297 - acc: 0.7798 - val_loss: 0.9030 - val_acc: 0.7628
Epoch 60/200
391/391 [==============================] - 53s 134ms/step - loss: 0.8245 - acc: 0.7825 - val_loss: 0.8378 - val_acc: 0.7767
Epoch 61/200
 28/391 [=>............................] - ETA: 46s - loss: 0.8281 - acc: 0.7879390/391 [============================>.] - ETA: 0s - loss: 0.8177 - acc: 0.7851Buffered data was truncated after reaching the output size limit.

【问题讨论】:

【参考方案1】:

我认为这个错误是因为内存不足。您的 RAM 或 GPU 内存已满,无法处理新数据。 你可以做两项工作: 1. 减少批量大小。 2. 将模型保存在例如第 60 个 epoch 并关闭当前程序并运行新程序并将保存的模型和训练模型从 61 epoch 恢复到 120 epoch 并保存并关闭程序并为您感兴趣的 epoch 重复此工作

【讨论】:

【参考方案2】:

即使内存 |显卡 | colab 上的 DISK 是免费的,但仍然会出现此错误,因为在 colab 上显示单元格输出的内存有限。假设当我们在训练期间运行许多 epoch(148+)时内存限制在 2Mb 到 5Mb 左右,它往往会填满该内存,因此输出被截断,因为没有更多可用内存来显示缓冲的 epoch。但是,机器在后台继续运行,并且输出已处理但由于缓冲限制而未显示。你仍然会得到你想要的输出。

一种解决方案是不使用verbose=1(改为使用0)。

【讨论】:

或者改为设置verbose=2。 @greentec 随时在此处添加答案,在原始问题中而不是在其他重复项中。 我也遇到了这个问题,当我将详细程度更改为 2 并将日志保存到 csv 文件时,我不再收到错误消息。我拟合了具有 100 个 epoch 的模型,批次大小为 1。 这太漂亮了。每次我得到这个时,我都会重新启动运行时。假设有一些错误【参考方案3】:

这与硬件 RAM 或 GPU 容量无关。

Keras 框架在控制台中显示输出信息方面存在限制。

当您看到此消息时,您的进程正在后台进行,但您看不到它。

如果您使用 tensorflow 作为后端,请在您的 Keras 中编写 Tensorboard 回调以查看网络的详细输出。

https://keras.io/callbacks/#tensorboard

【讨论】:

以上是关于达到输出大小限制后,缓冲数据被截断的主要内容,如果未能解决你的问题,请参考以下文章

达到表大小限制时,MYSQL 是不是会截断表?

TCP缓冲区大小及限制

ieda控制台缓冲区限制问题

使用多行达到 Bigquery JS UDF 限制

如何限制管道(windows)的缓冲区大小?

在 JaxB 编组期间将字符串截断到最大限制