如何使用 TensorFlow 学习多 class 多输出 CNN
How to learn multi-class multi-output CNN with TensorFlow
我想用 TensorFlow 训练一个卷积神经网络来做多输出多class class化。
例如:如果我们采用 MNIST 样本集,并且总是将两张随机图像组合成一张,然后想要 class 化生成的图像。 classification 的结果应该是图像中显示的两位数字。
因此网络的输出可以具有 [-1, 2, 10] 的形状,其中第一个维度是批次,第二个维度代表输出(是第一个数字还是第二个数字),第三个是"usual" class显示数字的化。
我尝试用谷歌搜索了一段时间,但没能找到有用的东西。另外,我不知道 multi-output multi-class classification 是否是这个任务的正确命名。如果不是,正确的命名是什么?你有任何 links/tutorials/documentations/papers 解释我需要做什么来构建损失 function/training 操作吗?
我尝试的是使用 tf.split 将网络的输出拆分为单个输出,然后在每个输出上使用 softmax_cross_entropy_with_logits。结果我对所有输出进行平均,但它似乎不起作用。这种方法合理吗?
首先,您必须为由两张不同图片组成的图片提供两个标签。然后更改您的 objective 损失函数,使其最大化两个给定标签的输出并训练您的模型。我认为您不需要拆分输出。
关于class化问题的命名法,你可以看看这个link:
http://scikit-learn.org/stable/modules/multiclass.html
所以你的问题叫做"Multilabel Classification"。在正常的 TensorFlow multiclass classification (classic MNIST) 中,你将有 10 个输出单元,你将在最后使用 softmax 进行计算损失即 "tf.nn.softmax_cross_entropy_with_logits"。
例如:如果您的图像有“2”,则真实值将为 [0,0,1,0,0,0,0,0,0,0]
但是在这里,您的网络输出将有 20 个单位,您将使用 sigmoid 即 "tf.nn.sigmoid_cross_entropy_with_logits"
例如:如果您的图像有“2”和“4”,则真实值将为 [0,0,1,0,0,0,0,0,0,0,0,0,0, 0,1,0,0,0,0,0],即前十位代表第一个数字class,第二个代表第二个数字class.
我想用 TensorFlow 训练一个卷积神经网络来做多输出多class class化。
例如:如果我们采用 MNIST 样本集,并且总是将两张随机图像组合成一张,然后想要 class 化生成的图像。 classification 的结果应该是图像中显示的两位数字。
因此网络的输出可以具有 [-1, 2, 10] 的形状,其中第一个维度是批次,第二个维度代表输出(是第一个数字还是第二个数字),第三个是"usual" class显示数字的化。
我尝试用谷歌搜索了一段时间,但没能找到有用的东西。另外,我不知道 multi-output multi-class classification 是否是这个任务的正确命名。如果不是,正确的命名是什么?你有任何 links/tutorials/documentations/papers 解释我需要做什么来构建损失 function/training 操作吗?
我尝试的是使用 tf.split 将网络的输出拆分为单个输出,然后在每个输出上使用 softmax_cross_entropy_with_logits。结果我对所有输出进行平均,但它似乎不起作用。这种方法合理吗?
首先,您必须为由两张不同图片组成的图片提供两个标签。然后更改您的 objective 损失函数,使其最大化两个给定标签的输出并训练您的模型。我认为您不需要拆分输出。
关于class化问题的命名法,你可以看看这个link: http://scikit-learn.org/stable/modules/multiclass.html
所以你的问题叫做"Multilabel Classification"。在正常的 TensorFlow multiclass classification (classic MNIST) 中,你将有 10 个输出单元,你将在最后使用 softmax 进行计算损失即 "tf.nn.softmax_cross_entropy_with_logits"。
例如:如果您的图像有“2”,则真实值将为 [0,0,1,0,0,0,0,0,0,0]
但是在这里,您的网络输出将有 20 个单位,您将使用 sigmoid 即 "tf.nn.sigmoid_cross_entropy_with_logits"
例如:如果您的图像有“2”和“4”,则真实值将为 [0,0,1,0,0,0,0,0,0,0,0,0,0, 0,1,0,0,0,0,0],即前十位代表第一个数字class,第二个代表第二个数字class.