Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.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:为什么Conv2D层的输出大小不';与特征图的预期形状不匹配?_Python_Tensorflow_Keras_Conv Neural Network_Mnist - Fatal编程技术网

Python Keras:为什么Conv2D层的输出大小不';与特征图的预期形状不匹配?

Python Keras:为什么Conv2D层的输出大小不';与特征图的预期形状不匹配?,python,tensorflow,keras,conv-neural-network,mnist,Python,Tensorflow,Keras,Conv Neural Network,Mnist,我试图在MNIST图像(28x28灰度图像)上运行卷积神经网络作为输入。为此,我使用Keras(代码如下所示)。我很难理解为什么卷积层的形状与我期望的形状不匹配 具体到第一个卷积层,我尝试使用32个特征映射,用3x3个内核卷积所有特征映射。我使用的批量是200 鉴于此,我预计第一个Conv2D层的形状为(200,26,26,32),即处理了200个样本(由于批量大小),32个特征图,其大小为26x26(由于应用于具有3x3内核的28x28输入图像的卷积) 但是,我使用model.summary(

我试图在MNIST图像(28x28灰度图像)上运行卷积神经网络作为输入。为此,我使用Keras(代码如下所示)。我很难理解为什么卷积层的形状与我期望的形状不匹配

具体到第一个卷积层,我尝试使用32个特征映射,用3x3个内核卷积所有特征映射。我使用的批量是200

鉴于此,我预计第一个Conv2D层的形状为(200,26,26,32),即处理了200个样本(由于批量大小),32个特征图,其大小为26x26(由于应用于具有3x3内核的28x28输入图像的卷积)

但是,我使用
model.summary()
得到的大小是(200,9,9,32),如下所示:

Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (200, 9, 9, 32)           320       
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (200, 4, 4, 32)           0         
_________________________________________________________________
dropout_1 (Dropout)          (200, 4, 4, 32)           0         
_________________________________________________________________
flatten_1 (Flatten)          (200, 512)                0         
_________________________________________________________________
dense_2 (Dense)              (200, 256)                131328    
_________________________________________________________________
dense_3 (Dense)              (200, 10)                 2570      
=================================================================
Total params: 134,218
Trainable params: 134,218
Non-trainable params: 0
_________________________________________________________________
我使用的代码是:

%tensorflow_version 2.x
# MNIST
from tensorflow.keras.datasets import mnist
from keras.utils import np_utils
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Convolution2D, MaxPooling2D, Dropout, Flatten, Dense

(X_train, y_train), (X_test, y_test) = mnist.load_data()

X_train = X_train.reshape(X_train.shape[0],28,28,1).astype('float32')
X_test  = X_test.reshape(X_test.shape[0],28,28,1).astype('float32')

X_train = X_train/255
X_test  = X_test/255

y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)

model = Sequential()
model.add(Convolution2D(32,3,3,activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(256,activation = 'relu'))
model.add(Dense(10, activation = 'softmax'))

model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy'])

history = model.fit(X_train, y_train, validation_data = (X_test, y_test), epochs = 10, batch_size = 200, verbose = 2)

model.summary()

提前谢谢

这是因为
卷积2D(32,3,3)
是一个卷积层,输出32个特征映射,内核大小为3x3,步长为3


你的意思可能是
卷积2d(32,(3,3))
或者干脆
卷积2d(32,3)

这就是问题所在,谢谢:)