Keras 输入带有Conv2D错误的_形状

Keras 输入带有Conv2D错误的_形状,keras,Keras,我想使用Keras Conv2D,但出现错误: model.add(Conv2D(64, (2, 2), padding='valid', data_format='channels_last', input_shape=(1, 4, 4, 1))) Keras文档告诉我们输入形状是4D张量,但它抛出了以下错误: ValueError: Input 0 is incompatible with layer conv2d_1: expected ndim=4, found ndim=5. 我做

我想使用Keras Conv2D,但出现错误:

model.add(Conv2D(64, (2, 2), padding='valid', data_format='channels_last', input_shape=(1, 4, 4, 1)))
Keras文档告诉我们输入形状是4D张量,但它抛出了以下错误:

ValueError: Input 0 is incompatible with layer conv2d_1: expected ndim=4, found ndim=5.
我做了一些调试,发现在
topology.py
中有一个参数检查:

if spec.ndim is not None:
            if K.ndim(x) != spec.ndim:
                raise ValueError('Input ' + str(input_index) +
                                 ' is incompatible with layer ' +
                                 self.name + ': expected ndim=' +
                                 str(spec.ndim) + ', found ndim=' +
                                 str(K.ndim(x)))
我发现
x=Tensor(“conv2d\u 1\u input:0”,shape=(?,1,4,4,1),dtype=float32)
是一个具有
dim=5
的张量,spec是具有
dim=4
的InputSpec的实例,它从来都不相等。如何解决这个问题

守则:

def _build_model(self):
    # Neural Net for Deep-Q learning Model
    model = Sequential()
    model.add(Conv2D(64, (2, 2), padding='valid', data_format='channels_last', input_shape=(1, 4, 4, 1)))
    model.add(Conv2D(128, 3, strides=(1, 1), padding='valid'))
    model.add(Flatten())
    model.add(Dense(16, activation='relu'))
    model.add(Dense(self.action_size, activation='linear'))
    model.compile(loss='mse', optimizer=Adam(lr=self.learning_rate))
    return model
试试这个:

model.add(Conv2D(64,(2,2),padding='valid',data\u format='channels\u last',input\u shape='4,4,1))

卷积2D层需要#采样*高度*宽度*通道。样本数是从您输入数据的model.fit()函数中推断出来的

如果您将MNIST视为最简单的示例,则可以这样做:

model = Sequential()

model.add(Conv2D(32, (3, 3), padding='same', input_shape=(28, 28, 1)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
...
history = model.fit(X-train, y_train, batch_size=32, epochs=1)
试试这个:

model.add(Conv2D(64,(2,2),padding='valid',data\u format='channels\u last',input\u shape='4,4,1))

卷积2D层需要#采样*高度*宽度*通道。样本数是从您输入数据的model.fit()函数中推断出来的

如果您将MNIST视为最简单的示例,则可以这样做:

model = Sequential()

model.add(Conv2D(32, (3, 3), padding='same', input_shape=(28, 28, 1)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
...
history = model.fit(X-train, y_train, batch_size=32, epochs=1)