Caffe 只训练一个标签
Caffe only trains for one label
这真的很奇怪。我正在实施这个模型:
除了我使用 ImageData blob 从文本文件中读取数据外,batch_size:1. 只有两个标签,文本文件的组织方式与往常一样
/home/.../pathToFile 0
...
/home/.../pathToFile 1
Caffe 仍然只训练和测试标签 0!
我运行使用常规工具的caffe。
./build/tools/caffe train --solver=solver.prototxt
当我在 pycaffe 中打开网络时,我第一次收到此消息:
WARNING: Logging before InitGoogleLogging() is written to STDERR
和大小
net.blobs['label'].data
现在是 1,当它应该是 2 时!
不仅如此,那个标签似乎是一个浮点数而不是一个整数。
In: net.blobs['label'].data
Out: array([ 0.], dtype=float32)
我知道这以前有效,但我无法理解我做错了什么或从哪里开始解决问题。
你的网络的输出形状取决于输入 batch_size
:如果你定义 batch_size: 1
而你的网络每次处理一个 单个 例子,因此它只读取一个 label
。如果将 batch_size
改为 2,caffe 将读取两个样本,因此 label
的形状将变为 2.
这个 "shape rule" 的一个例外是损失输出:损失定义了一个 标量 函数,计算梯度。因此,无论输入形状如何,损失输出始终是标量。
关于label
的数据类型:Caffe将所有变量存储在"Blobs"中,类型为float32
。
这真的很奇怪。我正在实施这个模型:
除了我使用 ImageData blob 从文本文件中读取数据外,batch_size:1. 只有两个标签,文本文件的组织方式与往常一样
/home/.../pathToFile 0 ... /home/.../pathToFile 1
Caffe 仍然只训练和测试标签 0!
我运行使用常规工具的caffe。
./build/tools/caffe train --solver=solver.prototxt
当我在 pycaffe 中打开网络时,我第一次收到此消息:
WARNING: Logging before InitGoogleLogging() is written to STDERR
和大小
net.blobs['label'].data
现在是 1,当它应该是 2 时!
不仅如此,那个标签似乎是一个浮点数而不是一个整数。
In: net.blobs['label'].data
Out: array([ 0.], dtype=float32)
我知道这以前有效,但我无法理解我做错了什么或从哪里开始解决问题。
你的网络的输出形状取决于输入 batch_size
:如果你定义 batch_size: 1
而你的网络每次处理一个 单个 例子,因此它只读取一个 label
。如果将 batch_size
改为 2,caffe 将读取两个样本,因此 label
的形状将变为 2.
这个 "shape rule" 的一个例外是损失输出:损失定义了一个 标量 函数,计算梯度。因此,无论输入形状如何,损失输出始终是标量。
关于label
的数据类型:Caffe将所有变量存储在"Blobs"中,类型为float32
。