tensorflow - 比较不同维度的张量
问题描述
我有两个不同维度的张量。说带有维度的张量A
和带有维度的(1,3)
张量。B
(1, 5)
A = [a1, a2, a3]
B = [b1, b2, b3, b4, b5]
这些值之间存在已知的分组。例如,b1
和b2
对应于a1
,b3
对应于a2
,并且b4
和b5
对应于a3
。我想计算这些张量之间的差异。所以我想要张量C
为:
C = [b1-a1, b2-a1, b3-a2, b4-a3, b5-a3]
为了做到这一点,我必须转换A
为:
A = [a1, a1, a2, a3, a3]
然后我可以计算C
。
有没有办法通过将给定张量的值复制给定次数来创建新张量?例如,我可以提供数组/张量来指示每个元素应该重复[2, 1, 2]
多少次。A
我尝试使用tf.tile
,但它在维度级别运行并且不能复制张量的值。
tf.map_fn
似乎是对张量中的值进行修改的好方法。但我无法让它适用于上述情况。
我试过这样的事情:
k=(tf.constant([1,2]), tf.constant([2,3]))
z=tf.map_fn(lambda x: [code here to duplicate elements in x[0] by x[1] times], k, dtype=tf.int32)
但无法弄清楚[code here to duplicate elements in x[0] by x[1] times]
解决方案
你不需要使用tf.map_fn
. 矢量化可以通过组合tf.sequence_mask
和来实现tf.boolean_mask
。
import tensorflow as tf
A = tf.constant([1,2,3])
indic = tf.constant([2,1,2])
max_length = tf.reduce_max(indic,axis=0)
# 2
new_A = tf.tile(tf.expand_dims(A,1),[1,max_length])
# [[1 1]
# [2 2]
# [3 3]]
mask = tf.sequence_mask(indic,max_length)
# [[ True True]
# [ True False]
# [ True True]]
result = tf.boolean_mask(new_A,mask)
with tf.Session() as sess:
print(sess.run(result))
[1 1 2 3 3]
推荐阅读
- mysql - 在 sql 中使用以下命令从表中获取值
- python-3.x - 在 Python 中根据条件删除行
- database - 通过 API 插入 clickhouse 数据
- apache-kafka - 更改配置后 Kafka 主题中旧消息的保留时间
- javascript - CKEDITOR : setData() 导致大型文档出错
- c - 通过共享内存进行进程间通信
- ios - NSUserdefault 在 Preferences 文件夹中创建多个文件
- java - 我想根据 jpql 中的 updated_on 时间戳聚合数据,但关键字 INTERVAL 无效
- javascript - 出口 = module.exports = require("../../node_modules/css-loader/lib/css-base.js")(false);
- html - 使用html矢量标记语言