如何用TensorFlow学习多类多输出CNN

如何用TensorFlow学习多类多输出CNN,tensorflow,conv-neural-network,Tensorflow,Conv Neural Network,我想用TensorFlow训练一个卷积神经网络来进行多输出多类分类 例如:如果我们取MNIST样本集,总是将两个随机图像合并为一个,然后想要对结果图像进行分类。分类结果应为图像中显示的两位数字 因此,网络的输出可以具有形状[-1,2,10],其中第一个维度是批次,第二个维度代表输出(是第一个还是第二个数字),第三个维度是所示数字的“常用”分类 我在谷歌上搜索了一会儿,但没能找到有用的东西。此外,我不知道多输出多类分类是否是此任务的正确命名。如果不是,正确的命名是什么?你有任何链接/教程/文档/论

我想用TensorFlow训练一个卷积神经网络来进行多输出多类分类

例如:如果我们取MNIST样本集,总是将两个随机图像合并为一个,然后想要对结果图像进行分类。分类结果应为图像中显示的两位数字

因此,网络的输出可以具有形状[-1,2,10],其中第一个维度是批次,第二个维度代表输出(是第一个还是第二个数字),第三个维度是所示数字的“常用”分类

我在谷歌上搜索了一会儿,但没能找到有用的东西。此外,我不知道多输出多类分类是否是此任务的正确命名。如果不是,正确的命名是什么?你有任何链接/教程/文档/论文来解释我需要做什么来构建损失函数/培训操作吗


我尝试的是使用tf.split将网络的输出分成单个输出,然后在每个输出上使用softmax_cross_entropy_和_logits。结果我平均了所有输出,但似乎不起作用。这是一种合理的方法吗?

首先,您必须为包含两个不同图像的图像提供两个标签。然后更改目标损失函数,使两个给定标签的输出最大化,并训练模型。我认为您不需要拆分输出。

有关分类问题的命名,您可以查看以下链接:

所以你的问题叫做“多标签分类”。在正常的TensorFlow多类分类(经典MNIST)中,您将有10个输出单元,并在末尾使用softmax计算损失,即“tf.nn.softmax\u cross\u entropy\u with\u logits”

例:如果你的图像有“2”,那么地面真相将是[0,0,1,0,0,0,0,0]

但在这里,您的网络输出将有20个单位,您将使用sigmoid,即“tf.nn.sigmoid\u cross\u entropy\u with\u logits”


例:如果你的图像有“2”和“4”,那么地面真相将是[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],即前十位代表第一位数字类,第二位代表第二位数字类。

好吧,我的问题是损失函数应该是什么样子的。有没有一个tensorflow方法可以用来计算这个损失函数?如果不是,我将如何计算它?很抱歉,我对tensorflow不太熟悉,但在阅读了教程后,我假设y_u应该只有几个值,例如,交叉熵:交叉熵=tf.reduce_mean(tf.nn.softmax_cross_entropy_uwith_logits(y,y_u))你试过了吗?如果它不起作用,就自己用矩阵而不是向量来编码成本函数。例如,在theano中,负对数似然是:T.mean(T.log(self.p_y__给定的x)[T.arange(y.shape[0]),y]),我将使y(标签)成为一个矩阵,每个例子有几个标签。