【问题标题】:Tensorflow Convolution Neural Network Negative Dimension sizeTensorflow 卷积神经网络负维度大小
【发布时间】:2021-12-15 18:56:26
【问题描述】:

我正在构建这个 CNN 模型, '''

x_test = np.array(x_test).reshape(-1,IMAGE_SIZE,IMAGE_SIZE,1)
x_train = np.array(x_train).reshape(-1,IMAGE_SIZE,IMAGE_SIZE,1)


model = tf.keras.Sequential()

model.add(Conv2D(16,(3,3),padding='same',input_shape=x_train.shape[1:]))  
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(32,(3,3),strides=(2,2),padding='valid'))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

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),strides=(2,2),padding='valid'))
model.add(Activation("relu"))

model.add(GlobalAveragePooling2D())
model.add(Dense(64))
model.add(Activation("relu"))
model.add(Dense(10))
model.add(Activation("softmax"))

'''

但这给了我一个错误:- InvalidArgumentError: '{{node conv2d_115/Conv2D}} = Conv2D[T=DT_FLOAT, data_format="NHWC", dilations=[1, 1, 1, 1], explicit_paddings=[] 从 1 中减去 2 导致的负维度大小, padding="VALID", strides=[1, 2, 2, 1], use_cudnn_on_gpu=true](Placeholder, conv2d_115/Conv2D/ReadVariableOp)' 输入形状:[?,1,1,32], [2, 2,32,64]。

在处理上述异常的过程中,又发生了一个异常:

ValueError: '{{node conv2d_115/Conv2D}} = Conv2D[T=DT_FLOAT, data_format="NHWC", dilations=[1, 1, 1, 1], explicit_paddings 从 1 中减去 2 导致的负维度大小=[], padding="VALID", strides=[1, 2, 2, 1], use_cudnn_on_gpu=true](Placeholder, conv2d_115/Conv2D/ReadVariableOp)' 输入形状:[?,1,1,32], [2,2,32,64]。

这个错误是什么意思?我做错了什么?请帮我解决这个问题。

【问题讨论】:

    标签: python tensorflow keras conv-neural-network


    【解决方案1】:

    这可能意味着,由于像 maxpooling 和具有“有效”填充值的 conv2d 等层,某些层的输入变得非常小,以至于其张量的形状为 [?,1,1,32],因此它无法执行大小为 2 的 2D 最大池化或 2D 卷积。在这种情况下,您需要根据输入大小重新设计层(这意味着更改层数,或输入大小、步幅、填充选项,. ..)。

    【讨论】:

      猜你喜欢
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 2020-07-10
      相关资源
      最近更新 更多