我使用C ++将我的图像数据转换为caffe db格式(leveldb,lmdb),例如我将此代码用于imagenet。
是否需要对数据进行洗牌,我可以写入所有积极因素,然后写入所有负面信息,例如00000000111111111,或者数据是否需要洗牌,标签应该看起来像010101010110101011010?
来自DB的caffe样本数据是如何使用size = batch_size
的所有数据的随机子集?
答案 0 :(得分:10)
你应该对样本进行洗牌吗?如果你没有洗牌,请考虑学习过程; caffe只看到0
个样本 - 您期望算法推断出什么?只是简单地预测0
,一切都很酷。如果你在点击第一个0
之前有足够的1
,那么caffe将非常有信心预测0
。从这一点开始移动模型将非常困难
另一方面,如果它经常看到0
和1
的混合,它会从头开始学习 有意义的功能来分隔示例。
底线:对训练样本进行随机播放是非常有利的,尤其是在使用基于SGD的方法时。
AFAIK,caffe不会随机抽样batch_size
个样本,而是在batch_size
个样本之后依次在输入数据库batch_size
上进行采样。
<强> TL; DR 强>
洗牌。