caffe2 operator 如何输入.Arg的参数

你好,我在运行caffe2训练分类模型时候,在softmax&loss层遇到了这个问题。

我的label格式,是[[1,0,0].[0,1,0],[0,0,1],……[1,0,0]],来标注的3个分类。
数据有35个参数。

目前在跑流程,模型层级是fc,sigmod,softmax&loss

weight = m.param_init_net.XavierFill([], 'fc_w', shape=[3,35])
bias = m.param_init_net.ConstantFill([], 'fc_b', shape=[3])

fc_1 = m.net.FC(["data", "fc_w", "fc_b",],"fc1")
pred = m.net.Sigmoid(fc_1, "pred")
[softmax, loss] = m.net.SoftmaxWithLoss([pred, "label"], ["softmax", "loss"])

workspace.RunNetOnce(m.param_init_net)
workspace.CreateNet(m.net)
for j in range(0, 100):
    data = Fea_tr.astype(np.float32)
    label = Lab_tr.astype(np.int32)

    
    workspace.FeedBlob("data", data)
    workspace.FeedBlob("label", label)

    workspace.RunNet(m.name, 10)

在执行runnet的时候:最后一个层级报错:

RuntimeError: [enforce fail at softmax_with_loss_op.cc:95] T.size_from_dim(canonical_axis) == 1. 3 vs 1 Error from operator: input: "pred" input: "label" output: "softmax" output: "loss" name: "" type: "SoftmaxWithLoss"

然后,我打开这个op的softmax&loss的文档,发现他axis这个参数,定义在.Arg里,default是1.
请问,我该怎么设置这个op的.Arg,在代码中。我想改成3试试。

或者,如果是我程序别的问题,造成的softmax失败,也请大神帮我指点一下。非常感谢。
已邀请:

breadbread1984 - Caffe2话题版主。深度学习研究者,Caffe的爱好者

赞同来自:

感觉直接写pbtxt文件比写程序要少写不少代码。在pbtxt中
op {
type: "操作符名字"
input: "输入blob名字"
output: "输出blob名字"
arg {
name: "单个整数的参数名字"
i: 1
}
arg {
name: "单个浮点数参数的名字"
f: 0.1
}
arg {
name: "多个整数的参数名字"
ints: 1
ints: 2
ints: 3
}
arg {
name: "多个浮点数参数的名字"
floats: 1.0
floats: 2.0
floats: 3.0
}
}

要回复问题请先登录注册