gpt4 book ai didi

python - Caffe将python层中的标签数据处理为int

转载 作者:行者123 更新时间:2023-11-30 09:09:19 24 4
gpt4 key购买 nike

我正在尝试使用 python 层制作标签数据。也就是说,我有一个 caffe 数据的 LMDB 数据库,其中标签由 6 个使用位掩码的标签组成,我需要提取其中之一来学习它。

但是当传递给 MyPythonLayer.forward 方法时,标签字段似乎具有 np.float32 类型并进行舍入,以便转换回 int 具有与原始值不同的值。当然,它使得用位掩码提取部分内容变得毫无用处。有什么方法可以强制 Caffe 将标签数据作为 int 传递给 MyPythonLayer.forward 吗?

MyNet.prototxt:

layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
scale: 1
}
data_param {
source: "SUMTH.../train_lmdb"
batch_size: 3400
backend: LMDB
}
}
...
layer {
name: 'convert_compose_label_py'
type: 'Python'
bottom: 'label'
top: 'extracted_label'
python_param {
module: 'convert_compose_label'
layer: 'ComposeLabelToSingleLabel'
param_str: '1'
}
}
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "ip2"
bottom: "extracted_label"
top: "loss"
}

模块convert_compose_label.py:

class ComposeLabelToSingleLabel(caffe.Layer):
...
def forward(self, bottom, top):
batch_size = bottom[0].data.shape[0]
out_file1 = open(self.log_file1, 'a')
for i in range(batch_size):
out_file1.write("%d\n" % bottom[0].data[i]) # result differs from label values in LMDB at 1-2 lowest digits
single_label = (compose_label.astype(np.int32) >> self.shift) & self.kLabelMask # if not use astype(np.int32) it produces error that >> can not be used with np.float32.
top[0].data[i]=single_label # Obviously result is incorrect when self.shift==0
...

最佳答案

没有。

为什么?

Caffe 将 Datum 中的标签存储为 int,但当它读取 Datum 并将其“分解”为 “data”时"label" blob 值会转换为 float32 因为 Blob 数据类型是(通过默认)float32

如果您需要多标签输入到 caffe,可以使用 "HDF5Data" 层(更加灵活),或使用 "Python" 层。

关于python - Caffe将python层中的标签数据处理为int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44243063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com