如何以十为单位交换三维张量中的行

2024-09-29 01:28:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经做了两个小时了,这是一个很简单的问题。我正在建立一个优化权重使用遗传算法和执行变异,我需要能够交换一个与另一个神经网络的权重行

我有一个三维张量为每一层的形状[人口,总输入,总输出]。我在三维张量中选取一行,然后两个人交换同一行的值。例如,行[nn1,行\u到\u交换]需要与行[nn2,行\u到\u交换]交换。你知道吗

一个张量为population 3、input nodes 3和output nodes 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]]

当然,张量流有点复杂。你知道吗


Tags: 方法inputoutput神经网络权重nodes形状人口
1条回答
网友
1楼 · 发布于 2024-09-29 01:28:15

这可以通过使用tf.scatter\u nd\u更新. 请查找示例代码段:

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))

相关问题 更多 >