如何解决一次进行神经网络分类和回归
我在空间中生成形成环的随机分布的数据点。我这样做直到得到一定数量的铃声,然后将其转换为图像。看起来像这样:
然后,我将这些图像作为输入提供给CNN,以训练网络获取一幅图像中的环数。
print(X_train_CNN.shape,X_test_CNN.shape,Y_train_CNN.shape,Y_test_CNN.shape)
(4000,32,1) (1000,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来完成这两项任务? 如何突出显示图像中正确分类的圆圈? (就像物体检测一样)
解决方法
您正确地说过,这是2个不同的任务。对于圈数,您使用softmax函数,该函数将输出相互关联。 (总和= 1) 显然,您不能将输出层应用于回归问题,因为不同圆的半径彼此独立。您至少要为此问题定义一个新的输出层/损失函数,但是您可以保留没有输出层的基础模型(当然,不确实可以保证模型对于两种应用)
编辑:关于突出显示,您的模型仅计算个圆,它无法识别对象,也不会告诉您哪个圆已真正算作一个圆。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。