Matrix 如何在一个大矩阵的不同范围内得到分批约化和?

Matrix 如何在一个大矩阵的不同范围内得到分批约化和?,matrix,tensorflow,deep-learning,Matrix,Tensorflow,Deep Learning,通过提供一个大矩阵emb,以及起始位置start_pos和结束位置end_pos。如何获得不同emb范围的REDUCT_sim(例如,结果应为形状(2,16),第一行是emb第1行到第11行的和,第二行是emb第2行到第31行的和) 注:我尝试使用GPU(tf.py_func可以工作,但它在CPU上) 更新:我有一个解决方案,但它不是基于矩阵。我使用tf.while\u loop在start\u pos/end\u pos中循环每个pos来计算 编辑: 事实上,以矢量化的方式做得更好并不难。它需

通过提供一个大矩阵emb,以及起始位置start_pos和结束位置end_pos。如何获得不同emb范围的REDUCT_sim(例如,结果应为形状(2,16),第一行是emb第1行到第11行的和,第二行是emb第2行到第31行的和)

注:我尝试使用GPU(tf.py_func可以工作,但它在CPU上)

更新:我有一个解决方案,但它不是基于矩阵。我使用tf.while\u loop在start\u pos/end\u pos中循环每个pos来计算

编辑:

事实上,以矢量化的方式做得更好并不难。它需要更多内存,但速度应该快得多:

将tensorflow导入为tf
tf.enable_eager_execution()
emb=tf.ones([100,16])
起始位置=tf.常数([1,2])
end_pos=tf.常数([11,31])
#选择每个切片的索引
r=tf.range(tf.shape(emb)[0])[tf.newaxis]

m=(r>=start_pos[:,tf.newaxis])&(r tf.gather将只收集单行。相反,我想要从start_pos到end_pos的范围。是的,您是正确的。它是从第1行到第11行。@Hypnoz使用更好的矢量化解决方案再次更新。谢谢,我提出了相同的解决方案(使用tf.while_循环)顺便说一句,如果我最后添加一个损失函数,你认为梯度会流向emb吗?apply_梯度对emb总是不返回任何值。
import tensorflow as tf

tf.enable_eager_execution()

emb = tf.ones([100,16])
start_pos = tf.constant([1,2])
end_pos = tf.constant([11,31])