Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/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 不相容形状Keras-NN_Python_Tensorflow_Machine Learning_Keras_Neural Network - Fatal编程技术网

Python 不相容形状Keras-NN

Python 不相容形状Keras-NN,python,tensorflow,machine-learning,keras,neural-network,Python,Tensorflow,Machine Learning,Keras,Neural Network,我尝试使用NN处理28x28灰度图像。我的培训数据如下所示: 重塑数据 out: x_train.shape (24000, 28, 28, 1) y_train.shape (24000, 1) 定义keras模型 model = Sequential() model.add(layers.Conv2D(28, (1, 1), activation='relu', input_shape=(28, 28, 1))) model.add(layers.MaxPooling2D((2, 2)))

我尝试使用NN处理28x28灰度图像。我的培训数据如下所示:

重塑数据

out:
x_train.shape
(24000, 28, 28, 1)
y_train.shape
(24000, 1)
定义keras模型

model = Sequential()
model.add(layers.Conv2D(28, (1, 1), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(56, (1, 1), activation='relu'))
model.add(layers.Conv2D(56, (1, 1), activation='relu'))
#model.add(layers.Flatten())
#model.add(layers.Dense(56, activation='relu'))
#model.add(layers.Dense(10))
model.summary()
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(input_x, input_y, epochs=20, batch_size=28)

_, accuracy = model.evaluate(X_validation, y_validation)
print('Accuracy: %.2f' % (accuracy*100))
模型摘要

conv2d_86 (Conv2D)           (None, 28, 28, 28)        56        
max_pooling2d_52 (MaxPooling (None, 14, 14, 28)        0         
conv2d_87 (Conv2D)           (None, 14, 14, 56)        1624      
conv2d_88 (Conv2D)           (None, 14, 14, 56)        3192      

Total params: 4,872
Trainable params: 4,872
Non-trainable params: 0
错误 InvalidArgumentError:不兼容的形状:[28,14,14]与[28,1]
我应用了一个简单的NN结构并给出了这个错误,我接下来将添加平坦和密集层,一旦我能够使用这些层运行它。

最后一个Conv2D层输出[14*14]无法与目标形状[1]进行比较以计算损失。因此出现了错误。通常,Conv2D层需要展平并通过DNN(您已注释的部分)才能完成模型体系结构。最后一个密集层中的单元(神经元)由您试图解决的问题的性质决定。在这里,你提到它是10,但是你在这里使用了损失作为二元交叉熵,这通常用于二元分类问题。如果您希望解决一个多类分类问题(在您的案例中,输出是10个类中的一个),那么您需要使用损失作为“稀疏的分类交叉熵”或“分类交叉熵”。您还需要使用最后一个密集层中的“softmax”激活函数进行多类分类,使用“sigmoid”激活函数进行二进制分类

我建议在继续你的任务之前,对协解神经网络有一个基本的了解是有益的

我个人从中受益的一个重要来源是:
. 第3课涉及CNN,但在进入第3课之前,最好先看一下第1课。非常好。

因此,我将conv2D层展平,并将它们通过一个带有2个单位的DNN,因为我的标签引用了一个二进制选项(0或1)。还指定了二进制交叉熵。我需要对卷积神经网络做更多的研究。顺便说一句,当我运行它时,我的准确度不是从0出来的,你知道是什么导致了它吗?对于二元分类,你只需要在最后一个密集层中的一个单元,激活指定为“sigmoid”。sigmoid激活函数将始终产生介于0和1之间的值,默认阈值0.5用于将输出分类为两个类别之一(0或1)。