python 如何避免在Tensorflow中填充被加数

bnl4lu3b  于 2023-01-12  发布在  Python
关注(0)|答案(1)|浏览(101)

我有两个TensorA,形状为(25, 1010, 7, 512),和B,形状为(10, 7)。
我想使用A的第二维以在Numpy中可以完成的方式将B添加到前10个切片:

A[:, :10, :, :] += B[np.newaxis, :, :, np.newaxis]

(It原始Tensor是否更新并不重要,我可以在适当的位置更新或创建新Tensor)。
当然,这不能直接在tensorflow 中完成,tf.tensor_scatter_nd_add似乎不适用于这种情况,因为切片没有进入要更新的Tensor的最终维度。有没有什么方法可以稀疏地完成这一点,或者我需要将B填充100倍?
编辑:我在将numpy示例从就地更新转换为添加时搞砸了它。

bwleehnv

bwleehnv1#

    • EDIT:**由于OP正在尝试进行项分配that is not available in TensorFlow(但在PyTorch中可用!!),您可以使用tf.concat在轴1上附加求和后的剩余Tensor。

请查看我的更新代码-

import tensorflow as tf
#tf.__version__ = '2.3.1'

#numpy arrays with your shapes
a = np.random.random((25, 1010, 7, 512))
b = np.random.random((10, 7))

#convert to tensors
A = tf.convert_to_tensor(a)
B = tf.convert_to_tensor(b)

#Broadcasted sum >> concat with remaining array over axis 1
A = tf.concat([A[:,:10,:,:] + B[None, :, :, None], A[:,10:,:,:]], axis=1)
A.shape
TensorShape([25, 1010, 7, 512])

只是为了检查你得到的答案是否与你在NumPy中的项目分配相同,你可以这样做-
一个二个一个一个

相关问题