【问题标题】:Transform Tensor to a vector将张量转换为向量
【发布时间】:2018-05-02 14:09:40
【问题描述】:

我有一个形状的张量:

2 x 2 x 3 x 2

即:{玩家、回合、加注次数、采取的行动}

这是一个两人游戏,两轮后结束,最多可以进行 3 次加注,每次加注都包含有关所采取行动的信息。

我想创建一个代表游戏每一步的数组。所以我有关于每个玩家每次加注、每一轮的行动的信息。

有没有可能做这样的事情:

players = array[0, 1]
rounds = array[2, 3]
raises = array[4, 5, 6]
actions = array[7, 8]

niceAndHandyArray = someFunction(players, rounds, raises, actions)
# Which outputs something like this:
[
    [0, [
            2, [
                   4, [7, 8]
                ],
            ...
        ],
    [1, 
         ... 
    ]
]

# And then access it like:
niceAndHandyAcrray[player_index][round_index][raise_index][action_index] = 1

# And pass it to my neural network later on as:
niceAndHandyArray.flatten()

【问题讨论】:

  • 您的playersrounds 等数组在此处包含什么?不应该len(actions) == 24 (2 x 2 x 3 x 2)?
  • 如果你使用有意义的值会很好,这样我们就可以知道你的结果数组中哪个是哪个。但是您似乎正在尝试在其中创建具有不同形状的元素,这在 keras 中的单个张量中是不可行的。
  • 对不起,你是对的。向量长度为​​ 24(稍后我必须连接一些额外的信息,这会添加一个长度为 6 的数组)。我尝试从给定的数组(玩家、回合、加注、动作)中创建“投注历史”。我会尽快修改我的问题。
  • 您的数据是如何组织的?你真的有这样的数组吗?那你怎么知道哪个玩家有哪个动作?
  • 也许只是np.zeros((2,2,3,2))

标签: python numpy tensorflow neural-network keras


【解决方案1】:

尝试使用reshape:

#Example:
# tensor 't' is [[[1, 1, 1],
#                 [2, 2, 2]],
#                [[3, 3, 3],
#                 [4, 4, 4]],
#                [[5, 5, 5],
#                 [6, 6, 6]]]
# tensor 't' has shape [3, 2, 3]
# pass '[-1]' to flatten 't'
tf.reshape(t, [-1])
#output: [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6]

【讨论】:

  • 我的问题不是当张量 't' 已经设置时如何展平它。我的问题是如何从给定的数组(玩家、回合、加注、动作)中产生张量“t”。不过谢谢你的回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 2019-07-29
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 2022-10-17
相关资源
最近更新 更多