将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实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
Python中的数据对象持久化存储模块pickle的使用示例
Mar 03 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
教你用python3根据关键词爬取百度百科的内容
Aug 18 Python
python制作小说爬虫实录
Aug 14 Python
python重试装饰器的简单实现方法
Jan 31 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
Apr 01 Python
简单了解django索引的相关知识
Jul 17 Python
django-rest-swagger的优化使用方法
Aug 29 Python
python使用paramiko实现ssh的功能详解
Mar 06 Python
简单介绍一下pyinstaller打包以及安全性的实现
Jun 02 Python
Python 无限级分类树状结构生成算法的实现
Jan 21 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
给初学者的30条PHP最佳实践(荒野无灯)
2011/08/02 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
jquery提示 "object expected"的解决方法
2009/12/13 Javascript
js实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色
2010/05/27 Javascript
js indexOf()定义和用法
2012/10/21 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
浅谈js中的闭包
2015/03/16 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
python创建线程示例
2014/05/06 Python
在Python中画图(基于Jupyter notebook的魔法函数)
2019/10/28 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
用python实现名片管理系统
2020/06/18 Python
美国中小型企业领先的办公家具供应商:Office Designs
2016/11/26 全球购物
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
元旦晚会主持词
2014/03/24 职场文书
推荐信模板
2014/05/09 职场文书
2015年信贷员工作总结
2015/04/28 职场文书
公司员工宿舍管理制度
2015/08/07 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL