Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法在CNN上执行回归_Python_Tensorflow_Machine Learning_Keras_Conv Neural Network - Fatal编程技术网

Python 无法在CNN上执行回归

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

我正在使用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('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
    )而不是回归?您是否需要每两张连续的图像进行一次比较,并根据结果继续这样做?