【问题标题】:Expected conv2d_input to have 4 dimensions, but got array with shape (1, 1, 1, 150, 75, 3)?预期 conv2d_input 有 4 个维度,但得到了形状为 (1, 1, 1, 150, 75, 3) 的数组?
【发布时间】:2021-08-28 02:19:23
【问题描述】:

此论坛上已发布并回答了与此类似的问题,但这个特殊情况我没有找到任何解决方案。 (我正在使用 Keras)

我有 (150,75,3) 形状的图像,我将 numpy 数组重新整形为 (1,150,75,3)

这应该可以工作,但出现了这个错误:

ValueError: Error when checking input: expected conv2d_input to have 4 dimensions, but got array with shape (1, 1, 1, 150, 75, 3)

编辑:这就是我处理图像的方式:

self.pinballEnvironmrnt = PinballEnv(self.screenDimensions,self.startPosition)
    image = pygame.surfarray.array3d(self.pinballEnvironmrnt.screen)
    #image = Image.fromarray(image)
    #image = image.resize(self.resize)
    self.state = numpy.array([image])#.reshape((-1,1200,600,3))
    print('the shape of the state ------------------> ',self.state.shape)

输出(错误未包含在此图片中): 这是 DQN 代理:

pool_size = (2, 2)
    # MODEL 1
    self.model = Sequential()
    self.model.add(Conv2D(4, (3, 3),input_shape=(150,75,3),activation='relu'))
    # Conv Layer 2
    self.model.add(Conv2D(8, (3, 3),activation='relu'))
    # Pooling 1
    self.model.add(MaxPooling2D(pool_size=pool_size))

    self.model.add(Flatten())
    self.model.add(Dense(128,activation='relu'))
    self.model.add(Dense(64,activation='relu'))
    self.model.add(Dense(16,activation='relu'))
    self.model.add(Dense(actions,activation='linear'))
    print(self.model.summary())

【问题讨论】:

  • 请在您创建输入的地方添加代码并定义您的模型,否则只有一些随机猜测。
  • 好的,我添加了代码,我希望现在问题更清楚了
  • 仍不清楚。当您向model.fit() 提供输入时会引发错误。所以,你应该添加这一行。还有model.compile() 以及您在哪里准确定义和重塑您的输入。您添加了一些代码,将数组重塑为 (1,1200,600,3),但您的错误是关于形状为 (1,150,75,3) 的数组。

标签: python keras conv-neural-network dqn


【解决方案1】:

您为Conv2D 层提供了太多维度作为输入。考虑图像在 NumPy 中表示为形状为(height, width, channels) 的矩阵。一般来说,在处理图像时,机器学习库期望作为输入批次的数据,因此实际输入形状应该是(batch_size, height, width, channels),这就是为什么错误说预期维度是 4。实际上,如果你有一个变量 @ 987654324@ 是您所有图像的列表,如果您使用 tensorflow,则可以像 np.array(images)tf.convert_to_tensor(images) 一样添加批量维度。

【讨论】:

  • 我还应该补充一点,如果您只有一个图像要提供给模型,那么它应该首先插入到一个列表中,如下所示:np.array([image])tf.convert_to_tensor([image])
  • 我添加了更多代码以使问题更清晰
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 2019-11-11
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多