Python 按常数因子缩放张量中的行集
TL;DR如何将张量的一部分缩放2(tf列表中的行索引)Python 按常数因子缩放张量中的行集,python,tensorflow,Python,Tensorflow,TL;DR如何将张量的一部分缩放2(tf列表中的行索引) 详情: 索引行ID的索引:存储行ID的列表 Tensor(“挤压:0”,dtype=int64,device=/device:GPU:0) [1,4,5,6,12] emb\u inputs=tf.nn.embedding\u查找(embedding,self.all\u行) #带形状的张量(批量大小=4,全行长度,emb大小=128) 因此,对于每个self.all\u行,将评估emb\u输入 面临的问题/挑战:我需要将emb\u输入
详情:
索引行ID的索引
:存储行ID的列表
Tensor(“挤压:0”,dtype=int64,device=/device:GPU:0)
[1,4,5,6,12]
emb\u inputs=tf.nn.embedding\u查找(embedding,self.all\u行)
#带形状的张量(批量大小=4,全行长度,emb大小=128)
因此,对于每个self.all\u行
,将评估emb\u输入
面临的问题/挑战:我需要将emb\u输入按2.0
进行缩放,以缩放索引中提到的每一行\u id
。
我尝试过各种拼接方法,但似乎没有找到一个好的解决方案。有人能建议吗?谢谢
注意:Tensorflow的初学者可以尝试以下方法:
SCALE = 2
emb_inputs = ...
indices_of_scaling_ids = ...
emb_shape = tf.shape(emb_inputs)
# Select indices in boolean array
r = tf.range(emb_shape[1])
mask = tf.reduce_any(tf.equal(r[:, tf.newaxis], indices_of_scaling_ids), axis=1)
# Tile the mask
mask = tf.tile(mask[tf.newaxis, :, tf.newaxis], (emb_shape[0], 1, emb_shape[2]))
# Choose scaled or not depending on indices
result = tf.where(mask, SCALE * emb_inputs, emb_inputs)
这是纯粹的美!非常感谢。给我几分钟试试,我试了几个小时才成功。你能评论一下如何用这个来修复这个错误吗?非常感谢!另外,元素在第二个索引编号列表上的三维矩阵缩放比通常更难,因为轴参数也不适用,掩蔽也更复杂out@VishalAnand我懂了,最初的代码对我有用,但可能这取决于TensorFlow的版本,它是否只支持在tf.where
中为第一维度提供数组。我已经在代码中添加了一个平铺,看看它是否适合你。终于让它工作了!对答案进行了一次小的编辑(迭代第二个索引,第一个索引指的是批号)。再次感谢@维沙兰感谢你的修复,我误读了一些问题,很抱歉造成混乱。