【问题标题】:Fine-tuning VGG last layer is very slow微调VGG最后一层很慢
【发布时间】:2017-04-30 19:55:37
【问题描述】:

我正在使用 tensorflow 在 32 cpu 机器上微调 VGG16 网络。我使用稀疏的交叉熵损失。我必须将布料图像分类为 50 个类别。经过 2 周的训练,损失是这样下降的,我觉得收敛速度很慢。我的批量大小是 50。这是正常的还是您认为这里出了什么问题?准确性也很差。现在它因错误的内存分配错误而崩溃。 terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_allo

我在日志文件中的最后一行是这样的 -

2016-12-13 08:56:57.162186: step 31525, loss = 232179.64 (1463843.280 sec/batch)

我还尝试了 Tesla K80 GPU,经过 20 小时的训练,这就是损失的样子。所有参数都相同。令人担忧的部分是 - 使用 GPU 并没有增加迭代率,这意味着每个步骤在 32 cpu 和 50 threds 或 tesla K80 中都需要相同的时间。

我在这里绝对需要一些实用的建议。

【问题讨论】:

  • 您的问题由两部分组成。收敛不好与参数和输入处理有关,也许您需要尝试不同的权重衰减和学习率衰减,或者也尝试不同的损失优化。关于您的系统内存不足,那么只需减小批处理大小,不要立即将所有数据加载到内存中,而是在它们之间进行交换。
  • 为了能够帮助您更多地与我们分享您的参数和超参数。

标签: machine-learning computer-vision tensorflow deep-learning


【解决方案1】:

另一个——而且明显更好的——选项是不使用 VGG16。如果您查看Figure 5 in this paper,您会注意到 VGG16 在准确度与 FLOP(每秒浮点操作数)方面的表现非常糟糕。如果您需要速度,Mobilenet 或缩小尺寸的 ResNet 会做得更好。即使是 inception-v2 在准确度上也将优于 VGG,而且计算成本要低得多。

这将大大减少您的训练时间内存使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 2015-12-19
    • 1970-01-01
    • 2020-11-29
    • 2016-02-23
    相关资源
    最近更新 更多