gpt4 book ai didi

python - MaxPool 上的负维度大小

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:37 25 4
gpt4 key购买 nike

我已经使用 Keras 实现了以下模型。在下面,我使用的是 Tensorflow。

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense

model = Sequential()
model.add(Conv2D(32, (2, 2), input_shape=(3, 150, 150), padding='SAME'))
model.add(Activation('relu'))
# model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(MaxPooling2D(pool_size=(2, 2), data_format="channels_last"))

model.add(Conv2D(32, (2, 2), padding='SAME'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (2, 2), padding='SAME'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

但是,我遇到了这个异常:

tensorflow.python.framework.errors_impl.InvalidArgumentError: Negative dimension size caused by subtracting 2 from 1 for 'max_pooling2d_2/MaxPool' (op: 'MaxPool') with input shapes: [?,1,75,32].

我正在使用 SAME 填充和 2*2 的卷积,所以输出应该是 2*2 而我应该是能够在其上运行 MaxPooling。

我只是不明白输入如何达到 [?,1,75,32] 的形状。

最佳答案

问题是第一个卷积的输入大小。

您正在使用 tensorflow 和“channels-last”布局。因此,您需要在 channel 前指定x和y分辨率。

model.add(Conv2D(32, (2, 2), input_shape=(150, 150, 3), padding='SAME'))

你的初始形状是[?, 3, 150, 150],池化应用于第二和第三项,这就是形状[?, 1, 75, 32] 已创建。32 是卷积中的过滤器数量。

如果你想让你的过滤器保持在第一个轴上,Keras 有一个配置文件,在 Linux 下,它应该在/home/user/.keras/keras.json 中。在此配置文件中,您可以更改 channel 布局,该选项称为 image_data_format。您可以在 channels_firstchannels_last 之间切换。

关于python - MaxPool 上的负维度大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44987177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com