Tensorflow 实现修改张量特定元素的值方法


Posted in Python onJuly 30, 2018

最近在做一个摘要生成的项目,过程中遇到了很多小问题,从网上查阅了许多别人解决不同问题的方法,自己也在旁边开了个jupyter notebook搞些小实验,这里总结一下遇到的一些问题。

Tensorflow用起来不是很顺手,很大原因在于tensor这个玩意儿,并不像数组或者列表那么的直观,直接print的话只能看到 Tensor(…) 这样的提示。比如下面这个问题,我们想要修改张量特定位置上的某个数值,操作起来就相对麻烦一些。和array一样,张量也是可以分段读取的,比如 tensor[1:10], tensor[:3]这种操作都是支持的,但是,张量是不能直接修改数值的。

比如,如果是array的话,一句赋值语句就可以将某个元素的值进行修改,但是,如果用同样的方法处理tensor的话,就会报错:

import tensorflow as tf
tensor_1 = tf.constant([x for x in range(1,10)])
# tensor_1 是一个数值为1到9的张量,希望把中间第五个数值改为0 
tensor_1[4] = 0

这时就会报错,错误类型是:

TypeError: 'Tensor' object does not support item assignment

所以说tensor是可以分段读取,但是不能直接修改的,有点像“只读”的模式。怎么解决呢?从其他博客中我总结了一个方法,后来自己又想了一个:

# 方法一 : 运用concat函数
tensor_1 = tf.constant([x for x in range(1,10)])
# 将原来的张量拆分为3部分,修改位置前的部分,要修改的部分和修改位置之后的部分
i = 4
part1 = tensor_1[:i]
part2 = tensor_1[i+1:]
val = tf.constant([0])
new_tensor = tf.concat([part1,val,part2], axis=0)

这时候再去打印,就可以看到第五个数已经变成了0。

# 方法二:使用one_hot来进行加减运算
tensor_1 = tf.constant([x for x in range(1,10)])
i = 4
# 生成一个one_hot张量,长度与tensor_1相同,修改位置为1
shape = tensor_1.get_shape().as_list()
one_hot = tf.one_hot(i,shape[0],dtype=tf.int32)
# 做一个减法运算,将one_hot为一的变为原张量该位置的值进行相减
new_tensor = tensor_1 - tensor_1[i] * one_hot

当然,tensor有一个assign的函数,但是他每次更新不能针对于相对位置,而是相当于对整个变量的重新赋值,在某些特定场合下,这个自带函数似乎并不是太好用。

以上这篇Tensorflow 实现修改张量特定元素的值方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python的迭代器、生成器以及相关的itertools包
Apr 02 Python
Python中文字符串截取问题
Jun 15 Python
举例讲解Python面向对象编程中类的继承
Jun 17 Python
Django的HttpRequest和HttpResponse对象详解
Jan 26 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
Python实现输出某区间范围内全部素数的方法
May 02 Python
对python自动生成接口测试的示例讲解
Nov 30 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
Jun 19 Python
在Python中表示一个对象的方法
Jun 25 Python
详解Python绘图Turtle库
Oct 12 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
Feb 17 Python
python+OpenCV实现图像拼接
Mar 05 Python
python用BeautifulSoup库简单爬虫实例分析
Jul 30 #Python
对TensorFlow的assign赋值用法详解
Jul 30 #Python
Python双向循环链表实现方法分析
Jul 30 #Python
tensorflow更改变量的值实例
Jul 30 #Python
Python使用分布式锁的代码演示示例
Jul 30 #Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 #Python
利用Python如何批量更新服务器文件
Jul 29 #Python
You might like
Drupal简体中文语言包安装教程
2014/09/27 PHP
PHP使用正则表达式获取微博中的话题和对象名
2015/07/18 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
Javascript的匿名函数小结
2009/12/31 Javascript
两个Javascript小tip资料
2010/11/23 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
wap浏览自动跳转到wap页面的js代码
2014/05/17 Javascript
理解js回收机制通俗易懂版
2016/02/29 Javascript
学习使用bootstrap3栅格系统
2016/04/12 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
详解使用create-react-app快速构建React开发环境
2018/05/16 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
Python使用Supervisor来管理进程的方法
2015/05/28 Python
Python模块结构与布局操作方法实例分析
2017/07/24 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
python绘制热力图heatmap
2020/03/23 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
2019/01/07 Python
eclipse创建python项目步骤详解
2019/05/10 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
全网最细 Python 格式化输出用法讲解(推荐)
2021/01/18 Python
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
运动会通讯稿300字
2014/02/02 职场文书
大学生活自我评价
2014/04/09 职场文书
技能比武方案
2014/05/21 职场文书
民族学专业求职信
2014/07/28 职场文书
党性心得体会
2014/09/03 职场文书
家庭贫困证明
2015/06/16 职场文书