【问题标题】:Keras definition of input shape - can only concatenate tuple (not "int") to tuple输入形状的 Keras 定义 - 只能将元组(不是“int”)连接到元组
【发布时间】:2020-09-21 10:56:21
【问题描述】:

按照本教程CartPole Neural Network,我正在尝试创建自己的版本。在教程代码本身中,replay 函数中有一个 python 错误,当像这样定义状态 numpay 数组时,batch_size 是 32,state_size 是 4(帧)* 160(像素高度)+ 240(像素宽度):

 state = np.zeros((self.batch_size,) + self.state_size)

抛出错误

can only concatenate tuple (not "int") to tuple

然后按照教程填充 state 变量:

for i in range(len(minibatch)): state[i] = minibatch[i][0]

这是我的困惑: 这个state 变量的正确形状是什么,因为教程的初始声明np.zeros 行不正确?我尝试提供一个形状为 (32,4,160,240) 的 numpy 数组,即 32 个单独的输入数组。导致此错误:

ValueError: Input 0 of layer sequential is incompatible with the layer: expected axis -1 of input shape to have value 153600 but received input with shape [32, 4, 160, 240]

然后我想,我需要使用以下 2 行将其重塑为一个零维为空的一维数组:

state = np.reshape(state, (4 * 160 * 240 )) state = np.expand_dims(state, axis=0)

但是,这给我带来了错误

ValueError: cannot reshape array of size 4915200 into shape (153600,)

TLDR:这个 np.zeros((shape) + int) 调用的目的是什么,为什么它对我来说失败了,输入 numpy 数组的预期形状是什么,总共有 32 个批次样本153600个输入节点?

谢谢。

【问题讨论】:

  • 更新:根据 predict 方法 API,输入可以是“或数组列表(如果模型有多个输入)”。所以我创建了一个空列表并将批次附加到它上面,这导致了这个错误:ValueError:层顺序需要1个输入,但它接收到32个输入张量。收到的输入:[, ,

标签: python keras input shapes


【解决方案1】:

np.zeros 在您定义的大小上创建一个由零组成的 NumPy 数组。

您正在尝试将 batch_size 与 state_size 连接,但您这样做了:

(self.batch_size,) + self.state_size

尝试去掉括号和逗号:

 state = np.zeros(self.batch_size + self.state_size)

【讨论】:

  • 这将创建一个包含 32 + 153600 个条目的单个数组,这与网络的输入计数不匹配。我想我需要的是一个包含单个批次的 32 个条目的数组,每个批次有 153600 个条目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多