tensorflow - 如何使用 TensorFlow 学习多类多输出 CNN

标签 tensorflow conv-neural-network

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

例如:如果我们采用 MNIST 样本集,并且总是将两张随机图像组合成一张,然后想要对生成的图像进行分类。分类的结果应该是图像中显示的两位数字。

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

我尝试用谷歌搜索了一段时间,但没能找到有用的东西。另外,我不知道多输出多类分类是否是这个任务的正确命名。如果不是,正确的命名是什么?您是否有任何链接/教程/文档/论文来解释我需要做什么来构建损失函数/训练操作?

我尝试的是使用 tf.split 将网络的输出拆分为单个输出,然后在每个输出上使用 softmax_cross_entropy_with_logits。结果我对所有输出进行平均,但它似乎不起作用。这是一种合理的方式吗?

最佳答案

关于分类问题的命名法,你可以看看这个链接: http://scikit-learn.org/stable/modules/multiclass.html

所以你的问题叫做“多标签分类”。在正常的 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],即前十位代表第一个数字类,第二个代表第二个数字类。

关于tensorflow - 如何使用 TensorFlow 学习多类多输出 CNN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40305692/

相关文章:

python - 长期不支持非资源变量

python - 减少卷积神经网络的内存需求

tensorflow - 在tensorflow中定义的faster_rcnn_resnet101(就像层在哪里)在哪里

python - 导入错误 : Keras requires TensorFlow 2. 2 或更高。通过 `pip install tensorflow` 安装 TensorFlow

python - 对图像进行 reshape 实际上有什么作用?

tensorflow - 从 Tensorflow 2.0 中加载的saved_model 访问中间层

tensorflow - 计算 tensorflow 中所有梯度的总和

machine-learning - 如何将此 keras cnn 模型转换为 pytorch 版本

opencv - 深度学习 - 如何执行 RANDOM CROP 并且不丢失数据中的任何信息(更改地面实况标签)

machine-learning - 如何获取检测到的图像的轮廓(使用 cnn 对象检测)而不是其周围的矩形框?