【问题标题】:Adding Accuracy and Loss Layer to RNN in CAFFE with DIGITS在 CAFFE 中使用 DIGITS 为 RNN 添加准确度和损失层
【发布时间】:2017-04-25 22:58:07
【问题描述】:

我刚刚在后端安装了带有 caffe 的数字。我正在尝试在我的数据集上训练 RNN with 50 layers。为了简单起见,我的数据集中最初只有三个类,即roadsparksponds。默认情况下,上述网络不包括准确性和损失层,因此在训练期间或之后它不会在 DIGITS 接口上显示任何准确性或损失。为了解决这个问题,我只是从 AlexNet 复制了相关层并将它们放在 RNN 的末尾以查看实际情况。我从RNN添加了以下三层

layer {
  name: "accuracy"
  type: "Accuracy"
  bottom: "fc1000"
  bottom: "label"
  top: "accuracy"
  include {
    stage: "val"
  }
}
layer {
  name: "loss"
  type: "SoftmaxWithLoss"
  bottom: "fc1000"
  bottom: "label"
  top: "loss"
  exclude {
    stage: "deploy"
  }
}
layer {
  name: "softmax"
  type: "Softmax"
  bottom: "fc1000"
  top: "softmax"
  include {
    stage: "deploy"
  }
}

网络经过训练后,在 DIGITS 界面中的准确率仅为 34%。当我使用 DIGITS 的Classify Many 功能并对验证数据集进行分类时,它告诉我一切都是road 类,因此在混淆矩阵中实现了 33% 的准确度。因为,我对这个领域非常陌生,我怀疑在网络末端添加上述三层后是否做错了什么。是对的吗?我搞砸了整个网络吗?如何在不破坏网络的情况下可视化数字的准确性和丢失?
编辑 1 以下是我在使用 Torch 的 DIGITS 中添加 facebook Resnet model 时遇到的错误。 .
请注意,之前有另一个错误抱怨 cudnnnil,当我在网络定义中将 require cunn 更改为 require cudnn 时,该错误消失了,因为这对我来说似乎是一个错字。

【问题讨论】:

  • 添加softmaxwithloss后就不需要softmax了。这也是一个部署模块。您是否正在从预训练模型初始化权重?如果没有,则需要添加权重初始化参数。
  • 不,我没有从预训练模型初始化。如何添加权重作为初始化参数?

标签: neural-network deep-learning caffe conv-neural-network


【解决方案1】:

你没有破坏网络。你只是不需要两个softmax 层。问题可能是它没有收敛。至于网络初始化参数我找不到作者的training.prototxt。他建议在this PR 中看到facebook's torch implementation,它比原来的实现有一些变化。您可以做的一件事是使用来自 deepdetect 的训练网络。但是那个 PR 的结论之一是由于 caffe 与BatchNorm 层的实现问题,它没有收敛。 deepdetect 的作者似乎不同意它不会收敛。无论哪种方式,似乎都已在 this PR 中得到修复。所以总结是:

  1. 使用最新版caffe
  2. 使用deepdetect 的网络和求解器。
  3. 首先检查它是否收敛于imagenetcifar(损失减少,错误减少)
  4. 如果确实如此,则使用您自己的数据进行训练
  5. 如果没有,我们将需要有关您的设置的更多信息

【讨论】:

  • 感谢@inman 的宝贵指导。我已经离开了 caffe,并在我的数据集上训练了 AlexNet 网络,从而获得了 86% 的准确率。受过 caffe 训练的相同网络只给了我 30%。现在,我正在尝试使用you suggested in answer 的fb Resnet。当我在 DIGITS 界面中加载此模型并单击可视化网络时,它给了我 VisualizationError。我该如何解决这个问题?我在我的问题中附上了错误的屏幕截图。
  • 我也在寻找一个预训练的图像分割模型,我可以对我的数据集进行微调。我更喜欢Torch 的网络,因为就训练准确性和损失而言,Caffe 的进展并不顺利。我正在考虑提出一个关于它的新问题,我将在 cmets 中发布一个指向它的链接。
  • torch 同时具有 cunncudnn 模块。 cunntorchnn 库的CUDA 实现,而cudnn 是与官方cuDNN 代码的绑定。您应该安装cunn 然后检查错误是否仍然发生。
  • semantic segmentation 可以从here 中选择一个。我不能推荐太多,因为我根本没有使用过torch。但对于 caffe,我可以推荐 FCN 。对于手电筒,您应该尝试使用fcn 的端口。
  • 谢谢哥们,我会试一试并及时通知你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 2017-03-14
  • 2017-06-20
相关资源
最近更新 更多