将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 相关文章推荐
利用Anaconda完美解决Python 2与python 3的共存问题
May 25 Python
python+selenium实现163邮箱自动登陆的方法
Dec 31 Python
python高阶爬虫实战分析
Jul 29 Python
对python 匹配字符串开头和结尾的方法详解
Oct 27 Python
详解Python下Flask-ApScheduler快速指南
Nov 04 Python
python列表list保留顺序去重的实例
Dec 14 Python
python实现维吉尼亚算法
Mar 20 Python
pandas实现将dataframe满足某一条件的值选出
Jun 12 Python
python word转pdf代码实例
Aug 16 Python
Python 安装 virturalenv 虚拟环境的教程详解
Feb 21 Python
Django数据统计功能count()的使用
Nov 30 Python
用python开发一款操作MySQL的小工具
May 12 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
基于mysql的论坛(6)
2006/10/09 PHP
深入密码加salt原理的分析
2013/06/06 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
XmlUtils JS操作XML工具类
2009/10/01 Javascript
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
2013/12/16 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
2015/08/20 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
JavaScript模块管理的简单实现方式详解
2019/06/15 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
Python合并字符串的3种方法
2015/05/21 Python
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
教你如何编写、保存与运行Python程序的方法
2019/07/12 Python
django做form表单的数据验证过程详解
2019/07/26 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
解决Python图形界面中设置尺寸的问题
2020/03/05 Python
python中如何设置代码自动提示
2020/07/15 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
SQL Server数据库笔试题和答案
2016/02/04 面试题
环境工程大学生自荐信
2013/10/21 职场文书
学习两会精神心得范文
2014/03/17 职场文书
网吧最新创业计划书范文
2014/03/27 职场文书
2014教师年度工作总结
2014/11/10 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
毕业生登记表班级意见
2015/06/05 职场文书
JavaScript实现简单计时器
2021/06/22 Javascript
《堡垒之夜》联动《刺客信条》 4月7日正式上线
2022/04/06 其他游戏