浅谈tensorflow中张量的提取值和赋值


Posted in Python onJanuary 19, 2020

tf.gather和gather_nd从params中收集数值,tf.scatter_nd 和 tf.scatter_nd_update用updates更新某一张量。严格上说,tf.gather_nd和tf.scatter_nd_update互为逆操作。

已知数值的位置,从张量中提取数值:tf.gather, tf.gather_nd

tf.gather indices每个元素(标量)是params某个axis的索引,tf.gather_nd 中indices最后一个阶对应于索引值。

tf.gather函数

函数原型

gather(
 params,
 indices,
 validate_indices=None,
 name=None,
 axis=0
)

params是要查找的张量,indices是要查找值的索引(int32或int64),axis是查找轴,name是操作名。

如果indices是标量

浅谈tensorflow中张量的提取值和赋值

如果indices是向量

浅谈tensorflow中张量的提取值和赋值

如果indices是高阶张量

浅谈tensorflow中张量的提取值和赋值

返回值:

该函数返回值类型与params相同,具体值是从params中收集过来的,形状为

浅谈tensorflow中张量的提取值和赋值

tf.gather_nd函数

函数原型

gather_nd(
 params,
 indices,
 name=None
)

indices是K阶张量,包含K-1阶的索引值。它最后一阶是索引,最后一阶维度必须小于等于params的秩。indices最后一阶的维数等于params的秩时,我们得到params的某些元素;indices最后一阶的维数小于params的秩时,我们得到params的切片。

浅谈tensorflow中张量的提取值和赋值

输出张量的形状由indices的K-1阶和params索引到的形状拼接而成,如下面

indices.shape[:-1] + params.shape[indices.shape[-1]:]

参数:

params:被收集的张量。

indices:索引张量。必须是以下类型之一:int32,int64。

name:操作的名称(可选)。

返回值:

该函数返回一个张量.与params具有相同的类型。张量值从indices所给定的索引中收集,并且具有这样的形状:

浅谈tensorflow中张量的提取值和赋值

已知赋值的位置,向张量赋值:tf.scatter_nd, tf.scatter_nd_update

tf.scatter_nd对零张量进行赋值,tf.scatter_nd_update对已有可变的张量进行赋值。

tf.scatter_nd函数
scatter_nd(
 indices,
 updates,
 shape,
 name=None
)

创建一个形状为shape的零张量,将updates赋值到indices指定的位置。

indices是整数张量,最内部维度对应于索引。

indices.shape[-1] <= shape.rank

如果indices.shape[-1] = shape.rank,那么indices直接对应到新张量的单个元素。如果indices.shape[-1] < shape.rank,那么indices中每个元素对新张量做切片操作。updates的形状应该如下所示

indices.shape[:-1] + shape[indices.shape[-1]:]

如果我们要把形状为(4,)的updates赋值给形状为(8,)的零张量,如下图所示。

浅谈tensorflow中张量的提取值和赋值

我们需要这样子做

indices = tf.constant([[4], [3], [1], [7]])
updates = tf.constant([9, 10, 11, 12])
shape = tf.constant([8])
scatter = tf.scatter_nd(indices, updates, shape)
with tf.Session() as sess:
 print(sess.run(scatter))

我们得到这样子的张量

[0, 11, 0, 10, 9, 0, 0, 12]

上面代码中,indices的形状是(4,1),updates的形状是(4,),shape的形状是(8,)。

indices.shape[:-1]+shape[indices.shape[-1]:] = (4,)+(,)=(4,)

如果我们要在三阶张量中插入两个切片,如下图所示,则应该像下面代码里所说的那样子做。

浅谈tensorflow中张量的提取值和赋值

indices = tf.constant([[0], [2]])
updates = tf.constant([[[5, 5, 5, 5], [6, 6, 6, 6],
   [7, 7, 7, 7], [8, 8, 8, 8]],
   [[5, 5, 5, 5], [6, 6, 6, 6],
   [7, 7, 7, 7], [8, 8, 8, 8]]])
shape = tf.constant([4, 4, 4])
scatter = tf.scatter_nd(indices, updates, shape)
with tf.Session() as sess:
 print(sess.run(scatter))

indices的形状是(2,1),updates的形状是(2,4,4),shape的形状是(4,4,4)。

indices.shape[:-1]+shape[indices.shape[-1]:]=(2,)+(4,4)=(2,4,4)

我们会得到这样子的张量

[[[5, 5, 5, 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]],
 [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]],
 [[5, 5, 5, 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]],
 [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]]

函数参数

indices:Tensor;必须是以下类型之一:int32,int64;索引值张量。

updates:Tensor;分散到输出的更新。

shape:Tensor;必须与indices具有相同的类型;1-d;得到的张量的形状。

name:操作的名称(可选)。

返回值

此函数返回一个Tensor,它与updates有相同的类型;一个有shape形状的新张量,初始化值为0,部分值根据indices用updates进行更新。

tf.scatter_nd_update函数

函数原型

scatter_nd_update(
 ref,
 indices,
 updates,
 use_locking=True,
 name=None
)

scatter_nd_update也是把updates里面的值根据indices赋值到另外一个张量中,与scatter_nd不同的是,它是赋值到ref。

ref是秩为P的张量,indices是秩为Q的张量。

indices是整数类型的张量,必须具有这样的形状浅谈tensorflow中张量的提取值和赋值

indices最内部的维度对应于ref的某个元素或切片。

updates的形状是浅谈tensorflow中张量的提取值和赋值 ,是秩为Q-1+P-K的张量。

如果我们想要把(4,)的向量赋值到(8,)的ref中,我们可以像下面这样子操作。

ref = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8])
indices = tf.constant([[4], [3], [1] ,[7]])
updates = tf.constant([9, 10, 11, 12])
update = tf.scatter_nd_update(ref, indices, updates)
with tf.Session() as sess:
 print sess.run(update)

我们可以得到这样的ref

[1, 11, 3, 10, 9, 6, 7, 12]

函数参数

ref:一个可变的Tensor。

indices:一个 int32 或 int64 Tensor;一个对ref进行索引的张量.

updates:一个Tensor.必须与ref具有相同的类型;更新值张量.

use_locking:可选的bool;如果为True,则赋值将受锁定的保护;否则行为是不确定的,但可能表现出较少的争用.

name:操作的名称(可选).

返回值:

经过更新的ref。

以上这篇浅谈tensorflow中张量的提取值和赋值就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用打码兔和超人打码自封装的打码类分享
Mar 16 Python
Python的面向对象思想分析
Jan 14 Python
Python Django使用forms来实现评论功能
Aug 17 Python
python3.5 email实现发送邮件功能
May 22 Python
Python实现的多进程和多线程功能示例
May 29 Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 Python
Python sorted函数详解(高级篇)
Sep 18 Python
Python给定一个句子倒序输出单词以及字母的方法
Dec 20 Python
Python3.5以上版本lxml导入etree报错的解决方案
Jun 26 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 Python
利用python Pandas实现批量拆分Excel与合并Excel
May 23 Python
Python序列化与反序列化相关知识总结
Jun 08 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
Jan 19 #Python
使用 Python 处理3万多条数据只要几秒钟
Jan 19 #Python
Python openpyxl模块原理及用法解析
Jan 19 #Python
Python imutils 填充图片周边为黑色的实现
Jan 19 #Python
python opencv 实现对图像边缘扩充
Jan 19 #Python
python给图像加上mask,并提取mask区域实例
Jan 19 #Python
python实现在一个画布上画多个子图
Jan 19 #Python
You might like
PHP实现在线阅读PDF文件的方法
2015/06/17 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
获取内联和链接中的样式(js代码)
2013/04/11 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
iScroll中事件点击触发两次解决方案
2015/03/11 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
2018/09/02 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
微信小程序如何获取用户头像和昵称
2019/09/23 Javascript
js仿360开机效果
2019/12/26 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
[01:12]DOTA2次级职业联赛 - Newbee.Y 战队宣传片
2014/12/01 DOTA
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
python按修改时间顺序排列文件的实例代码
2019/07/25 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
德国高尔夫商店:Par71.de
2020/11/29 全球购物
专业实习自我鉴定
2013/10/29 职场文书
移动通信专业自荐信范文
2013/11/12 职场文书
项目资料员岗位职责
2013/12/10 职场文书
村容村貌整治方案
2014/05/21 职场文书
英语系本科生求职信
2014/07/15 职场文书
会议通知格式范文
2015/04/15 职场文书