【问题标题】:How to swap rows inside a 3d tensor in tensorflow如何在张量流中交换 3d 张量内的行
【发布时间】:2019-09-29 22:49:21
【问题描述】:

我已经做了两个小时了,这是一个非常简单的问题。我正在使用 GA 构建权重优化器并执行突变,我需要能够将一个 NN 中的一行权重与另一个 NN 交换

我有一个 3d 张量用于形状 [population, total_input, total_output] 的每一层。我在 3d 张量中挑出一行,然后两个人必须交换完全相同行的值。例如行 [nn1,row_to_swap] 需要与行 [nn2,row_to_swap] 交换。

张量为 3、输入节点 3 和输出节点 2 的示例具有这种形状 [3,3,2],我想在其中交换 [0,0] 和 [1,0]:

      [[[ -0.08140966 -0.04416275 ],
        [ 0.08669635, -0.1681123 ],
        [ 0.06804892,  0.05393898]],

       [[ 0.11369397, -0.0822193 ],
        [-0.08230941,  0.16685687],
        [-0.08133464, -0.02710806]],

       [[ 0.08381592, -0.07583494],
        [-0.08355351,  0.07891247],
        [ 0.0392112 , -0.07686558]]]

它应该看起来像这样。

  [[[ -0.08140966 -0.04416275 ],
    [ 0.08669635, -0.1681123 ],
    [ 0.06804892,  0.05393898]],

   [[ 0.11369397, -0.0822193 ],
    [-0.08230941,  0.16685687],
    [-0.08133464, -0.02710806]],

   [[ 0.08381592, -0.07583494],
    [-0.08355351,  0.07891247],
    [ 0.0392112 , -0.07686558]]]

请注意,我不知道张量的确切形状是什么,因为它们将使用形状变量创建。有时这些方法可能需要进行多次交换。说 [1,0] 和 [1,2] 将不得不与 [0,0] 和 [0,2] 交换,所以如果有一种方法可以一次进行多次交换而不会创建一个很棒的循环.

例如:

      [[[ -0.08140966 -0.04416275 ],
        [ 0.08669635, -0.1681123 ],
        [ 0.06804892,  0.05393898]],

       [[ 0.11369397, -0.0822193 ],
        [-0.08230941,  0.16685687],
        [-0.08133464, -0.02710806]],

       [[ 0.08381592, -0.07583494],
        [-0.08355351,  0.07891247],
        [ 0.0392112 , -0.07686558]]]

它应该看起来像这样。

      [[[ 0.11369397, -0.0822193 ],
        [-0.08230941,  0.16685687]
        [-0.08133464, -0.02710806]],

       [[ -0.08140966 -0.04416275 ],
        [-0.08230941,  0.16685687],
        [ 0.06804892,  0.05393898]],

       [[ 0.08381592, -0.07583494],
        [-0.08355351,  0.07891247],
        [ 0.0392112 , -0.07686558]]]

Numpy 似乎有一个他们使用的简单解决方案

npArray[[0,0]] = npArray[[1,0]]

当然,TensorFlow 要复杂一些。

【问题讨论】:

  • 在您的第一个示例中,两个 Tenosr 看起来相同。另外,输入张量的形状是 (var1,var,var) 还是 (var,var,var1)?在您的示例中,它应该是后者,但您在开头提到它是 (var1,var,var)。
  • 您好,我解决了这个问题。

标签: python numpy tensorflow matrix


【解决方案1】:

这可以使用 tf.scatter_nd_update 来实现。请查找示例 sn-p:

ref = tf.Variable([[[1, 2,3],[3, 4,5],[5, 6,7], [7, 8,9]]])
print(ref)
indices = tf.constant([[0,1,1], [0,1,0], [0,0,0] ,[0,0,1]])
updates = tf.constant([9, 10, 11, 12])
update = tf.scatter_nd_update(ref, indices, updates)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(ref))
    print(sess.run(update))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 2018-02-13
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多