“我的数据有多个标签(三个标签),每个标签有两个以上的值(30个不同的值)”
我是否理解正确,您有 3 个网络输出和相关标签,每个都是 1-in-30 分类器?然后看来您可以添加三个 cross_entropy_with_softmax() 值。这就是你想要的吗?
例如如果模型函数返回一个三元组(以 return combine([z1, z2, z3]) 之类的结尾),那么您传递给 Trainer 的标准函数可能如下所示(如果您不使用 Python 3,则语法略有不同):
from cntk.layers.typing import Tensor, SparseTensor
@Function
def my_criterion(input : Tensor[input_dim], labels1 : SparseTensor[30],
labels2 : SparseTensor[30], labels3 : SparseTensor[30]):
z1, z2, z3 = my_model(input).outputs
loss = cross_entropy_with_softmax(z1, labels1) + \
cross_entropy_with_softmax(z2, labels2) + \
cross_entropy_with_softmax(z3, labels3)
return loss
learner = ...
trainer = Trainer(None, my_criterion, learner)
# in MB loop:
input_mb, L1_mb, L2_mb, L3_mb = my_next_minibatch()
trainer.train_minibatch(my_criterion.argument_map(input_mb, L1_mb, L2_mb, L3_mb))