Machine learning Caffe:使用ImageData层平衡批处理内的类

Machine learning Caffe:使用ImageData层平衡批处理内的类,machine-learning,caffe,pycaffe,Machine Learning,Caffe,Pycaffe,我正在Caffe培训一名CNN,其输出是两个类中的一个(二进制问题) 我使用一个ImageData层作为输入层,通过两个.txt文件和图像的训练和验证集。这些文件是平衡的,即两个类的示例数量相同。在这一层中,我还使用了“shuffle”参数 对此,我有两个疑问: 1。如何从.txt文件中采样/选择批次? 它是通过获取文件的前N个示例(假设N是批大小)来构造的,将它们洗牌并将它们传送到网络吗?从这个意义上讲,批次本身可能不平衡。这是否会影响培训/微调 另一种方法是从一个类中随机抽取N/2个示例,从

我正在Caffe培训一名CNN,其输出是两个类中的一个(二进制问题)

我使用一个ImageData层作为输入层,通过两个.txt文件和图像的训练和验证集。这些文件是平衡的,即两个类的示例数量相同。在这一层中,我还使用了“shuffle”参数

对此,我有两个疑问:

1。如何从.txt文件中采样/选择批次?

它是通过获取文件的前N个示例(假设N是批大小)来构造的,将它们洗牌并将它们传送到网络吗?从这个意义上讲,批次本身可能不平衡。这是否会影响培训/微调

另一种方法是从一个类中随机抽取N/2个示例,从另一个类中抽取N/2个示例,但我认为Caffe不会这样做

2。.txt文件中示例的顺序与批处理的构造方式有关?

以平衡批处理的方式构建.txt文件是否是一个好主意(例如,每一个奇数行都属于一个类,每一个偶数行都属于另一个类)

谢谢你的帮助

(1)是的,shuffle将随机化输入示例的顺序,前提是这些示例被适当地描绘出来——例如使用换行符将句子分隔成单独的示例。Caffe不需要按类平衡每个批次

这对训练的影响很小,但从长远来看应该是平衡的。重要的是每一个例子每一个时代都要准确地呈现一次

(2) 预平衡无关紧要:shuffle根据需要更改顺序(随机数生成)。

(1)是的,shuffle将随机化输入示例的顺序,前提是这些示例被适当地描绘出来——例如使用换行符将句子分成单独的示例。Caffe不需要按类平衡每个批次

这对训练的影响很小,但从长远来看应该是平衡的。重要的是每一个例子每一个时代都要准确地呈现一次

(2) 预平衡无关紧要:洗牌根据需要更改顺序(随机数生成)。

您有两个选择:

1-预平衡数据,并禁用洗牌

2-动态创建自己的批处理:在python中,您可以将自己的批处理创建为numpy数组,并将其馈送到网络中。查看如何使用python接口输入数据。在这个场景中,您可以创建满足您需求的任何批处理,也可以对其进行平衡。使用部署解决方案(本文中的第三个解决方案)时,您可以按如下方式输入数据: 使用部署版本时,您可以如下设置网络的输入数据:

x = data;
y = labels;
solver.net.blobs['data'].data[...] = x
net.blobs['label'].data[...] = y
然后,您可以调用
solver.net.step(1)
运行网络进行一次迭代(正向+反向传播)。

您有两个选项:

1-预平衡数据,并禁用洗牌

2-动态创建自己的批处理:在python中,您可以将自己的批处理创建为numpy数组,并将其馈送到网络中。查看如何使用python接口输入数据。在这个场景中,您可以创建满足您需求的任何批处理,也可以对其进行平衡。使用部署解决方案(本文中的第三个解决方案)时,您可以按如下方式输入数据: 使用部署版本时,您可以如下设置网络的输入数据:

x = data;
y = labels;
solver.net.blobs['data'].data[...] = x
net.blobs['label'].data[...] = y

然后,您可以调用
solver.net.step(1)
运行网络进行一次迭代(正向+反向传播)。

很高兴知道,@Prune!非常感谢您的回答!很乐意帮忙。谢谢你接受答案——这有助于将问题妥善归档。知道这一点很好,@Prune!非常感谢您的回答!很乐意帮忙。感谢您接受答案——这有助于将问题妥善归档。