使用神经网络进行数据处理

时间:2015-11-06 19:31:09

标签: neural-network caffe torch conv-neural-network

可能与this question有关,但我的目标是让网络对输入图像执行操作并输出生成的图像数据。

如果这个问题缺乏明确性,我很乐意在评论中深入研究我的问题。但是,我会尝试尽可能不具备案例,将此问题提交给其他人使用。

问题

我有大量的训练数据,包括建议操作之前和之后的图像。我的问题涉及如何使用Caffe训练每个像素1对1。我的损失应采取计算两幅图像之间差异的形式。

如果我的最后一个完全连接/内部产品层输出channels * height * width并且我有预期输出图像的标签(相同尺寸),我应该使用哪种类型的损耗+精度结构?

我的案例

我尝试使用我的标签数据简单地将内积数据传递给sigmoid交叉熵损失,但它似乎不是一种受支持的方法。

我的标签是非整数值,因为它们是介于0和1之间的像素RGB数据(注意:我可以使用0到255形式的整数),Caffe似乎将标签解释为类别而不是简单的价值观。

每个像素通道可以有255个类别,但这会产生255 * 3个通道* 256个高度* 256个宽度= 50,135,040个类别,这比我想要实现的目标复杂得多。

我的问题

  • Caffe本身是否支持我想要实现的目标?
    • 如果是这样,我应该如何更改我的结构以符合这些规范?
    • 如果没有,是否还有其他任何神经网络框架,如Torch支持这个?
  • 我试图用我的网络解决的问题类型是否有名称(当然不是分类分类)?
    • 过去用什么来解决这种问题?

具有潜在价值的来源

1 个答案:

答案 0 :(得分:0)

您正在寻找的损失层是Euclidean loss layer(均方误差):

layers {
  name: "loss"
  type: EUCLIDEAN_LOSS
  top: "loss"
  bottom: "CONVX_15"
  bottom: "labels"
}

您的问题是多元回归,您必须使用适合它的损失。 Sigmoid cross-entropy loss 用于分类,其中目标值(标签)必须在0和1之间(例如,像素开/关的概率)。

随着欧几里德的损失,请小心管理你的渐变。保持目标值在< 0,1>范围内。并使用Xavier权重初始化。不过,与分类问题相比,您可能需要设置较低的学习率,以防止SGD爆炸。