我想用TensorFlow训练卷积神经网络进行多输出多类分类。
例如:如果我们采用MNIST样本集并且总是将两个随机图像组合成两个,然后想要对结果图像进行分类。分类的结果应该是图像中显示的两位数。
因此,网络的输出可以具有形状[-1,2,10],其中第一个维度是批处理,第二个维度表示输出(是第一个还是第二个数字),第三个是& #34;通常"所示数字的分类。
我现在试着用谷歌搜索一段时间,但是找不到有用的东西。另外,我不知道多输出多类分类是否是此任务的正确命名。如果没有,那么正确的命名是什么?您是否有任何链接/教程/文件/文件说明我需要做什么来建立损失功能/培训操作?
我尝试的是使用tf.split将网络输出分成单个输出,然后在每个输出上使用softmax_cross_entropy_with_logits。结果我对所有输出进行了平均,但它似乎不起作用。这甚至是一种合理的方式吗?
答案 0 :(得分:3)
对于分类问题的命名,您可以查看以下链接: http://scikit-learn.org/stable/modules/multiclass.html
所以你的问题被称为" Multilabel Classification"。在普通的TensorFlow多类分类(经典MNIST)中,您将拥有10个输出单位,并且您将在末尾使用 softmax 来计算损失,即" tf.nn.softmax_cross_entropy_with_logits"。
例如:如果您的图片有" 2",那么groundtruth将为[0,0,1,0,0,0,0,0,0,0]
但是在这里,您的网络输出将有20个单位,您将使用 sigmoid ,即" tf.nn.sigmoid_cross_entropy_with_logits"
例如:如果您的图片有" 2" &安培; " 4",然后groundtruth将是[0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, 0,0],即前10位代表第一位数字,第二位代表第二位数字。
答案 1 :(得分:0)
首先,您必须为包含两个不同图像的图像提供两个标签。然后更改您的目标损失函数,以便最大化两个给定标签的输出并训练您的模型。我认为你不需要拆分输出。