在 Caffe 中为神经网络组织数据

Posted

技术标签:

【中文标题】在 Caffe 中为神经网络组织数据【英文标题】:Organizing Data for a Neural Network in Caffe 【发布时间】:2016-10-26 08:04:09 【问题描述】:

我正在尝试准备用于神经网络的数据。我相当迷失在所有的文档中。许多 Caffe 示例提供了预先准备好的数据,但我正在准备自己的数据。我的目标是让我的神经网络使用输入图像(我们称之为 x)并输出不同的图像(我们称之为 y)。我决定使用 HDF5 文件来使用 python 存储我的数据(我知道该怎么做)。但是,我想“显示”神经网络 xy 并让它输出 y-hat,就像在类似于所需的输出,y

但是,我不确定大多数卷积神经网络究竟是如何封装输入和所需输出以馈入神经网络(即分类网络如何将标签与数据一起馈送)。我是否应该将 xy 放入同一个 HDF5 数据集,然后再放入 Caffe 数据层?如果是这样,我是否可以像这样组织数据集:(x1, y1, x2, y2, ...) 或类似 (x1, x2, ..., xn, y1, y2, ..., yn)。 还是应该将理想输出 y 和输入 x 分类到单独的数据集中?如果可以,我可以将它们都加载到 Caffe 数据层吗?

非常感谢。

【问题讨论】:

您发现哪些示例最接近您的尝试?我从事基本的图像分类工作,但我可能能够转化为您的范式。 @Prune 我想我能想到的最接近的是图像分类卷积神经网络(如 Caffe 的 MNIST 示例)和通常用于图像分割的像素分类之间的一种组合,如下所示:@ 987654321@语义分割示例。我希望这更清楚一点。最后,我想读入图像并输出“带注释”的图像。 如果我正确理解您的解释,您的问题是您正在尝试将分类解决方案(将每个输入作为有限的给定选择集之一)应用于转换类型问题。您想输入很多 (x, y) 对来训练模型。一旦模型训练好,你想输入一个图像z,得到一个变换后的图像z-hat,它在y 训练中的图像。它是否正确?相反,您希望对 z 进行更改,这与训练 x->y 更改的方式相同。 @Prune 是的,我想你已经理解我的意图了。我和我的团队相当困惑,不确定这种方法是否合适。由于 Caffe 的示例使用预处理/组织的数据,我们不确定他们在将训练数据输入网络之前是如何组织训练数据的。 【参考方案1】:

我已经把这个问题绕了一段时间,从几个朋友那里抽空了,到目前为止我想出的最好的方法就是集中范式。

这实际上是一个复杂的预测任务,而不是分类任务。你所拥有的是一种多元变换。我相信您会希望将数据集组织为 (x1, y1), (x2, y2),输出预测是向量(线性格式的图像)或矩阵,对应于 NN 的倒数第二层.

【讨论】:

感谢您的回复,@Prune!我和我的团队将尝试这种方法,并在我们的硬件可用时立即更新这篇文章(目前正在进行一些暂停的测试)。 太棒了;我希望它有所帮助。问题是以不太严格的方式训练模型,以便您教它转换(过程),而不是严格的分类。

以上是关于在 Caffe 中为神经网络组织数据的主要内容,如果未能解决你的问题,请参考以下文章

使用caffe的cifar10网络模型训练自己的图片数据

如何利用Caffe训练ImageNet分类网络

ONNX简介

Caffe学习系列——工具篇:神经网络模型结构可视化

caffe数据层

[caffe]网络各层参数设置