将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
在神经网络计算过程中,经常会遇到需要将矩阵中的某些元素取出并且单独进行计算的步骤(例如MLE,Attention等操作)。那么在tensorflow的Variable类型中如何做到这一点呢?
首先假设Variable是一个一维数组A:
importnumpyasnp importtensorflowastf a=np.array([1,2,3,4,5,6,7,8]) A=tf.Variable(a)
我们把我们想取出的元素的索引存到B中,如果我们只想取出数组A中的某一个元素,则B的设定为:
b=np.array([3]) B=tf.placeholder(dtype=tf.int32,shape=[1])
由于我们的索引坐标只有一维,所以shape=1。
取出元素然后组合成tensorC的操作如下:
C=tf.gather_nd(A,B)
运行:
init=tf.global_variables_initializer() withtf.Session()assess: init.run() feed_dict={B:b} result=sess.run([C],feed_dict=feed_dict) printresult
得到:
[4]
如果我们想取出一维数组中的多个元素,则需要把每一个想取出的元素索引都单独放一行:
b=np.array([[3],[2],[5],[0]]) B=tf.placeholder(dtype=tf.int32,shape=[4,1])
此时由于我们想要从一维数组中索引4个数,所以shape=[4,1]
再次运行得到:
[4361]
////////////////////////////////////////////////////////////////////////////////////华丽丽的分割线
假设Variable是一个二维矩阵A:
a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) A=tf.Variable(a)
首先我们先取出A中的一个元素,需要给定该元素的行列坐标,存到B中:
b=np.array([2,3]) B=tf.placeholder(dtype=tf.int32,shape=[2])
注意由于我们输入的索引坐标变成了二维,所以shape也变为2。
取出元素然后组合成tensorC:
C=tf.gather_nd(A,B)
运行:
init=tf.global_variables_initializer() withtf.Session()assess: init.run() feed_dict={B:b} result=sess.run([C],feed_dict=feed_dict) printresult
得到:
[12]
同样的,如果我们想取出二维矩阵中的多个元素,则需要把每一个想取出的元素的索引都单独放一行:
b=np.array([[2,3],[1,0],[2,2],[0,1]]) B=tf.placeholder(dtype=tf.int32,shape=[4,2])
此时由于我们想要从二维矩阵中索引出4个数,所以shape=[4,2]
再次运行得到:
[125112]
////////////////////////////////////////////////////////////////////////////////////华丽丽的分割线
推广到n维矩阵中:
假设A是Variable类型的n维矩阵,我们想取出矩阵中的m个元素,那么首先每个元素的索引坐标要表示成列表的形式:
index=[x1,x2,x3,...,xn]
其中xj代表该元素在n维矩阵中第j维的位置。
其次每个坐标要单独占索引矩阵的一行:
index_matrix=[[x11,x12,x13,...,x1n], [x21,x22,x23,...,x2n], [x31,x32,x33,...,x3n], ......................................., [xm1,xm2,xm3,...,xmn]]
最后用tf.gather_nd()函数替换即可:
result=tf.gather_nd(A,index_matrix)
////////////////////////////////////////////////////////////////////////////////////华丽丽的分割线
[注]问题出自:https://stackoverflow.com/questions/44793286/slicing-tensorflow-tensor-with-tensor
以上这篇将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。