Python 无法在CNN上执行回归
我正在使用Keras建立一个卷积神经网络,它可以拍摄形状为Python 无法在CNN上执行回归,python,tensorflow,machine-learning,keras,conv-neural-network,Python,Tensorflow,Machine Learning,Keras,Conv Neural Network,我正在使用Keras建立一个卷积神经网络,它可以拍摄形状为(200,200,3)的图像,并输出一个数字,表示该图像在社交媒体上的预期点击量。y_序列和y_检验是维向量。以下是我目前的代码: model = Sequential() model.add(Conv2D(10, 1, 1, input_shape=(200, 200, 3))) model.add(Activation('relu')) model.add(Conv2D(10, 1, 1)) model.add(Activation
(200,200,3)
的图像,并输出一个数字,表示该图像在社交媒体上的预期点击量。y_序列和y_检验是维向量。以下是我目前的代码:
model = Sequential()
model.add(Conv2D(10, 1, 1, input_shape=(200, 200, 3)))
model.add(Activation('relu'))
model.add(Conv2D(10, 1, 1))
model.add(Activation('relu'))
model.add(MaxPool2D())
# model.add(Flatten())
model.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
model.fit(x_train, y_train)
score = model.evaluate(x_test, y_test)
我在说一个错误
预期激活_2有4个维度,但得到了具有形状的数组
(7,1)
其中(7,1)是y\u列的形状
。为什么会这样
model = Sequential()
model.add(Conv2D(10, 1, 1, input_shape=(200, 200, 3)))
model.add(Activation('relu'))
model.add(Conv2D(10, 1, 1))
model.add(Activation('relu'))
model.add(MaxPooling2D())
model.add(Flatten())
model.add(Dense(50))
model.add(Activation('relu'))
model.add(Dense(1))
model.compile(loss='mse',optimizer='rmsprop')
model.fit(x_train, y_train)
test_mse = model.evaluate(x_test, y_test)
print('test set mse is {}'.format(test_mse))
运行
model.summary()
查看每个层的形状y_train
的形状应该与最后一层相似(当然不考虑批量尺寸)。@今天它说所有层的形状都是(无、200、200、10)
。这是一个4维张量,正如错误告诉你的那样。你的图层显然没有产生你想要的预测形状。@Konstantinoskokos我知道。但我不知道为什么,这正是我问的原因。因为您使用的是MaxPool2D
作为最后一层(默认窗口大小为2*2
),所以最终的输出张量为shape(100100,10)
。另一方面,您试图预测一个值。因此,最后一层的形状应为(1,)
。实现这一点的一种方法是使用展平
层,然后是密集
层,最后一层是单个单元。然而,由于最后一层是巨大的(即100*100*10
),最好使用更多的conv和pooling层来减小张量的大小,然后在最后使用一个密集的
层。在下一篇评论中继续…在10个时代,这给出了大约2260的MSE。代码显示了如何在调整模型以获得更好结果的同时使模型工作。MSE值取决于训练集的标签值。如何更改模型,使其预测哪个图像“更好”(即y\u train
)而不是回归?您是否需要每两张连续的图像进行一次比较,并根据结果继续这样做?