【问题标题】:Neural network classification and regression at once [duplicate]神经网络分类和回归一次[重复]
【发布时间】:2020-08-31 09:13:32
【问题描述】:

我在空间中生成随机分布的数据点,形成一个环。我这样做直到获得一定数量的戒指,然后我将其转换为图像。看起来像这样:

之后,我将这些图像作为 CNN 的输入,以训练网络在一张图像中的环数。

print(X_train_CNN.shape, X_test_CNN.shape, Y_train_CNN.shape, Y_test_CNN.shape)
(4000, 32, 32, 1) (1000, 32, 32, 1) (4000,) (1000,)

import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense, Conv2D, Dropout, Flatten, MaxPooling2D

model = Sequential()

model.add(Conv2D(28, kernel_size=(3,3), input_shape=(imgsize, imgsize, 1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation=tf.nn.relu))
model.add(Dropout(0.2))
model.add(Dense(maxcircles,activation=tf.nn.softmax))

学习曲线和预测如下所示:

如您所见,分类效果很好。

除了每个图像的环数之外,我还想预测圆的半径。 但这些是根本不同的任务,因为一个是回归,另一个是分类。

有没有办法只用一个 CNN 来完成这两项任务? 以及如何突出显示图像中正确分类的圆圈? (比如物体检测)

【问题讨论】:

标签: machine-learning keras neural-network conv-neural-network


【解决方案1】:

正如您所说的那样,这是两个不同的任务。对于圈数,您使用 softmax 函数将您的输出相互关联。 (总和 = 1) 显然,您不能将此输出层应用于回归问题,因为不同圆的半径彼此独立。你至少要为这个问题定义一个新的输出层/损失函数,但是你可以保留基本模型没有输出层(这当然保证模型在两个应用程序)

编辑:关于突出显示,您的模型仅计算圆圈的数量,它不会识别对象,也不会告诉您哪个圆圈被真正计为一个。

【讨论】:

  • 所以你的意思是像在这个模型中添加另一个层,但这次使用回归优化功能?
  • 以及如何实现识别圆圈而不是仅仅计数?
  • @jeffs yes 用回归函数替换输出层。 (这仍然意味着 2 个不同的模型)。您必须查看此回归模型是否按预期执行,否则您必须以不同的方式调整模型的大小,因为它不是同一个任务!
  • 您必须定义一个最大环数,如果圆数小于最大环数,则定义一个半径值。 (可能为 0)。我建议您按半径长度降序排列输出。
  • 如果你想识别每个圈子。您必须求助于更复杂的图像识别技术(我不是该领域的专家)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
  • 2021-09-13
  • 2016-09-22
  • 2018-05-17
  • 2019-07-17
  • 2015-12-15
  • 2013-11-19
相关资源
最近更新 更多