将张量的一部分分配给另一个张量中的相应位置
Assign part of a tensor to the corresponding places in another tensor
我找不到如何用另一个张量数据替换部分张量数据。稍加挖掘后,我看到很多报告说张量不是可分配的数据;建议使用一些解决方法,例如 (https://github.com/tensorflow/tensorflow/issues/14132#issuecomment-483002522).
让我举一个简单的例子来说明我要找的东西。我有如下两批:
x=·tf.random.uniform((2,3,2))
y= tf.random.uniform((2,3,2))
print (x)
print ('===================')
print (y)
以上两批的输出如下:
<tf.Tensor: shape=(2, 3, 2), dtype=float32, numpy=
array([[[0.17130184, 0.5413419 ],
[0.6435019 , 0.82179713],
[0.79388785, 0.9519701 ]],
[[0.46769345, 0.9812336 ],
[0.5796915 , 0.29866755],
[0.0442245 , 0.86057484]]], dtype=float32)>
===================
<tf.Tensor: shape=(2, 3, 2), dtype=float32, numpy=
array([[[0.82299507, 0.8277409 ],
[0.24233484, 0.4353037 ],
[0.23145556, 0.00768614]],
[[0.83972216, 0.03451204],
[0.46768224, 0.44939125],
[0.7840742 , 0.99360645]]], dtype=float32)>
我想将 x 批次中每个数组的第一行替换为 y 批次中的相应数组。
我期待这样的结果:
<tf.Tensor: shape=(2, 3, 2), dtype=float32, numpy=
array([[[0.82299507, 0.8277409 ], # copied from the y batch
[0.6435019 , 0.82179713],
[0.79388785, 0.9519701 ]],
[[0.83972216, 0.03451204], # copied from the y batch
[0.5796915 , 0.29866755],
[0.0442245 , 0.86057484]]], dtype=float32)>
将批处理转换为 NumPy 时,以下工作正常(但这不是我想要的,我想直接使用张量)
x = x.numpy()
y = y.numpy()
x[:, 0:1 , : ] = y[:, 0:1 , :]
x
输出是 NumPy 数组,我可以将它再次转换为张量,但我想直接在张量上进行这样的操作。
array([[[0.82299507, 0.8277409 ],
[0.6435019 , 0.82179713],
[0.79388785, 0.9519701 ]],
[[0.83972216, 0.03451204],
[0.5796915 , 0.29866755],
[0.0442245 , 0.86057484]]], dtype=float32)
非常感谢任何帮助。
也许只是使用 tf.concat
:
import tensorflow as tf
tf.random.set_seed(1)
x= tf.random.uniform((2,3,2))
y= tf.random.uniform((2,3,2))
print('X -->', x)
print('Y -->', y)
print('Z -->', tf.concat([y[:, 0:1 , :], x[:, 1: , : ]], axis=1))
X --> tf.Tensor(
[[[0.16513085 0.9014813 ]
[0.6309742 0.4345461 ]
[0.29193902 0.64250207]]
[[0.9757855 0.43509948]
[0.6601019 0.60489583]
[0.6366315 0.6144488 ]]], shape=(2, 3, 2), dtype=float32)
Y --> tf.Tensor(
[[[0.51010704 0.44353175]
[0.4085331 0.9924923 ]
[0.68866396 0.34584963]]
[[0.436067 0.601061 ]
[0.45662427 0.75269794]
[0.18799722 0.54875696]]], shape=(2, 3, 2), dtype=float32)
Z --> tf.Tensor(
[[[0.51010704 0.44353175]
[0.6309742 0.4345461 ]
[0.29193902 0.64250207]]
[[0.436067 0.601061 ]
[0.6601019 0.60489583]
[0.6366315 0.6144488 ]]], shape=(2, 3, 2), dtype=float32)
我找不到如何用另一个张量数据替换部分张量数据。稍加挖掘后,我看到很多报告说张量不是可分配的数据;建议使用一些解决方法,例如 (https://github.com/tensorflow/tensorflow/issues/14132#issuecomment-483002522).
让我举一个简单的例子来说明我要找的东西。我有如下两批:
x=·tf.random.uniform((2,3,2))
y= tf.random.uniform((2,3,2))
print (x)
print ('===================')
print (y)
以上两批的输出如下:
<tf.Tensor: shape=(2, 3, 2), dtype=float32, numpy=
array([[[0.17130184, 0.5413419 ],
[0.6435019 , 0.82179713],
[0.79388785, 0.9519701 ]],
[[0.46769345, 0.9812336 ],
[0.5796915 , 0.29866755],
[0.0442245 , 0.86057484]]], dtype=float32)>
===================
<tf.Tensor: shape=(2, 3, 2), dtype=float32, numpy=
array([[[0.82299507, 0.8277409 ],
[0.24233484, 0.4353037 ],
[0.23145556, 0.00768614]],
[[0.83972216, 0.03451204],
[0.46768224, 0.44939125],
[0.7840742 , 0.99360645]]], dtype=float32)>
我想将 x 批次中每个数组的第一行替换为 y 批次中的相应数组。
我期待这样的结果:
<tf.Tensor: shape=(2, 3, 2), dtype=float32, numpy=
array([[[0.82299507, 0.8277409 ], # copied from the y batch
[0.6435019 , 0.82179713],
[0.79388785, 0.9519701 ]],
[[0.83972216, 0.03451204], # copied from the y batch
[0.5796915 , 0.29866755],
[0.0442245 , 0.86057484]]], dtype=float32)>
将批处理转换为 NumPy 时,以下工作正常(但这不是我想要的,我想直接使用张量)
x = x.numpy()
y = y.numpy()
x[:, 0:1 , : ] = y[:, 0:1 , :]
x
输出是 NumPy 数组,我可以将它再次转换为张量,但我想直接在张量上进行这样的操作。
array([[[0.82299507, 0.8277409 ],
[0.6435019 , 0.82179713],
[0.79388785, 0.9519701 ]],
[[0.83972216, 0.03451204],
[0.5796915 , 0.29866755],
[0.0442245 , 0.86057484]]], dtype=float32)
非常感谢任何帮助。
也许只是使用 tf.concat
:
import tensorflow as tf
tf.random.set_seed(1)
x= tf.random.uniform((2,3,2))
y= tf.random.uniform((2,3,2))
print('X -->', x)
print('Y -->', y)
print('Z -->', tf.concat([y[:, 0:1 , :], x[:, 1: , : ]], axis=1))
X --> tf.Tensor(
[[[0.16513085 0.9014813 ]
[0.6309742 0.4345461 ]
[0.29193902 0.64250207]]
[[0.9757855 0.43509948]
[0.6601019 0.60489583]
[0.6366315 0.6144488 ]]], shape=(2, 3, 2), dtype=float32)
Y --> tf.Tensor(
[[[0.51010704 0.44353175]
[0.4085331 0.9924923 ]
[0.68866396 0.34584963]]
[[0.436067 0.601061 ]
[0.45662427 0.75269794]
[0.18799722 0.54875696]]], shape=(2, 3, 2), dtype=float32)
Z --> tf.Tensor(
[[[0.51010704 0.44353175]
[0.6309742 0.4345461 ]
[0.29193902 0.64250207]]
[[0.436067 0.601061 ]
[0.6601019 0.60489583]
[0.6366315 0.6144488 ]]], shape=(2, 3, 2), dtype=float32)