【问题标题】:Incompatible shapes when output * actions_one_hot输出时不兼容的形状 * actions_one_hot
【发布时间】:2018-04-06 11:36:24
【问题描述】:

我正在尝试实现一个播放 Doom 的 Deep Q 网络(vizdoom)

但是我(从昨天开始)被一种热编码的问题及其后果所困扰:事实上,我有 3 种可能的操作是这样编码的

[[True, False, False], [False, True, False], [False, False, True]] size = [Batch_size, 3]

当我对这个动作数组进行 one_hot 编码时,我得到一个大小为 [BatchSize, 3, 3] 的数组

当我想计算我的 Q 值估计时:

Q = tf.reduce_sum(tf.multiply(self.output, self.actions_one_hot), axis=1)

tf.multiply(self.output, self.actions_one_hot) 产生错误:

InvalidArgumentError: Incompatible shapes: [10,3] vs. [10,3,3] [[Node: DQNetwork/Mul = Mul[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"](DQNetwork/dense/BiasAdd, DQNetwork/one_hot)]]

我知道这 2 个要相乘的形状不兼容,但我不明白我必须做什么才能使它们兼容。

为了更清楚this is the notebook with each part explained

我确信我犯了一个非常愚蠢的错误,但我没有看到它。

感谢您的帮助!

【问题讨论】:

    标签: python tensorflow deep-learning reinforcement-learning


    【解决方案1】:

    您必须使形状与tf.multiply 兼容,因为该函数是逐元素乘法。

    但是,我认为您可能对one_hot 做错了什么。通常,one_hot 函数将例如从数字转换为单热矩阵。假设您的操作空间中有 3 个可能的操作,它们是 (0,1,2),一个热门函数会将其转换为 [[1,0,0],[0,1,0],[0,0,1]]。 问题是您将 one_hot 向量发送到另一个 one_hot 函数。如果您直接发送动作,则两个张量的形状将相同。

    长话短说,您正在使用 one_hot 函数两次。如果你已经有一个 [True, False, False] 类型的向量,那么你已经有一个 one_hot。

    【讨论】:

      猜你喜欢
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 2022-01-03
      • 2018-01-10
      相关资源
      最近更新 更多