将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例


Posted in Python onJanuary 04, 2020

在神经网络计算过程中,经常会遇到需要将矩阵中的某些元素取出并且单独进行计算的步骤(例如MLE,Attention等操作)。那么在 tensorflow 的 Variable 类型中如何做到这一点呢?

首先假设 Variable 是一个一维数组 A:

import numpy as np

import tensorflow as tf

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。

取出元素然后组合成tensor C 的操作如下:

C = tf.gather_nd(A, B)

运行:

init = tf.global_variables_initializer()

with tf.Session() as sess:
  init.run()
  feed_dict = {B: b}
  result = sess.run([C], feed_dict=feed_dict)
  print result

得到:

[4]

如果我们想取出一维数组中的多个元素,则需要把每一个想取出的元素索引都单独放一行:

b = np.array([[3], [2], [5], [0]])

B = tf.placeholder(dtype=tf.int32, shape=[4, 1])

此时由于我们想要从一维数组中索引 4 个数,所以 shape=[4, 1]

再次运行得到:

[4 3 6 1]

////////////////////////////////////////////////////////////////////////////////////华丽丽的分割线

假设 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。

取出元素然后组合成tensor C:

C = tf.gather_nd(A, B)

运行:

init = tf.global_variables_initializer()

with tf.Session() as sess:
  init.run()
  feed_dict = {B: b}
  result = sess.run([C], feed_dict=feed_dict)
  print result

得到:

[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]

再次运行得到:

[12 5 11 2]

////////////////////////////////////////////////////////////////////////////////////华丽丽的分割线

推广到 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中的某些元素取出组成一个新的矩阵示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python装饰器在Django框架下去除冗余代码的教程
Apr 16 Python
Python中利用sqrt()方法进行平方根计算的教程
May 15 Python
python使用正则表达式提取网页URL的方法
May 26 Python
Python按行读取文件的简单实现方法
Jun 22 Python
Python文件和流(实例讲解)
Sep 12 Python
TensorFlow模型保存和提取的方法
Mar 08 Python
浅谈Python traceback的优雅处理
Aug 31 Python
python判断计算机是否有网络连接的实例
Dec 15 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
Mar 14 Python
pymysql的简单封装代码实例
Jan 08 Python
pytorch方法测试——激活函数(ReLU)详解
Jan 15 Python
pycharm进入时每次都是insert模式的解决方式
Feb 05 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
Jan 04 #Python
对tensorflow中的strides参数使用详解
Jan 04 #Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
Jan 04 #Python
TensorFlow tf.nn.max_pool实现池化操作方式
Jan 04 #Python
TensorFlow tf.nn.conv2d实现卷积的方式
Jan 03 #Python
Python调用钉钉自定义机器人的实现
Jan 03 #Python
pytorch中的上采样以及各种反操作,求逆操作详解
Jan 03 #Python
You might like
PHP 和 COM
2006/10/09 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
javascript中的self和this用法小结
2014/02/08 Javascript
javascript 获取元素样式必杀技
2014/05/04 Javascript
jQuery中:file选择器用法实例
2015/01/04 Javascript
JavaScript中常见的字符串操作函数及用法汇总
2015/05/04 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
Fullpage.js固定导航栏-实现定位导航栏
2016/03/17 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
2016/07/06 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
Mac下通过brew安装指定版本的nodejs教程
2018/05/17 NodeJs
微信小程序 调用远程接口 给全局数组赋值代码实例
2019/08/13 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
python实现多线程采集的2个代码例子
2014/07/07 Python
Python编程语言的35个与众不同之处(语言特征和使用技巧)
2014/07/07 Python
详解django中自定义标签和过滤器
2017/07/03 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
基于python实现模拟数据结构模型
2020/06/12 Python
python中scipy.stats产生随机数实例讲解
2021/02/19 Python
局部内部类是否可以访问非final变量?
2013/04/20 面试题
为什么需要版本控制
2016/10/28 面试题
善意的谎言事例
2014/02/15 职场文书
人力资源部经理岗位职责规定
2014/02/23 职场文书
进口业务员岗位职责
2014/04/06 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
2014年银行柜员工作总结
2014/11/12 职场文书
2014年小学校长工作总结
2014/12/08 职场文书
js Proxy的原理详解
2021/05/25 Javascript