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中正则表达式的用法实例汇总
Aug 18 Python
Python中type的构造函数参数含义说明
Jun 21 Python
python的random模块及加权随机算法的python实现方法
Jan 04 Python
浅谈python中的数字类型与处理工具
Aug 02 Python
详解Django中类视图使用装饰器的方式
Aug 12 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
Jul 28 Python
django在保存图像的同时压缩图像示例代码详解
Feb 11 Python
使用keras和tensorflow保存为可部署的pb格式
May 25 Python
什么是Python中的顺序表
Jun 02 Python
Python sqlalchemy时间戳及密码管理实现代码详解
Aug 01 Python
Python实现像awk一样分割字符串
Sep 15 Python
完美处理python与anaconda环境变量的冲突问题
Apr 07 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
Apache设置虚拟WEB
2006/10/09 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
2017/04/23 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
Angular2 父子组件通信方式的示例
2018/01/29 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
mpvue 单文件页面配置详解
2018/12/02 Javascript
js实现一个简易计算器
2020/03/30 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
Node.js创建一个Express服务的方法详解
2020/01/06 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
vue实现前端列表多条件筛选
2020/10/26 Javascript
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
python通过线程实现定时器timer的方法
2015/03/16 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
在python 中实现运行多条shell命令
2019/01/07 Python
bluepy 一款python封装的BLE利器简单介绍
2019/06/25 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
pycharm显示远程图片的实现
2019/11/04 Python
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
简历上的自我评价怎么写
2014/01/28 职场文书
《颐和园》教学反思
2014/02/26 职场文书
中学生操行评语大全
2014/04/24 职场文书
停课通知书
2015/04/24 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
参观监狱警示教育心得体会
2016/01/15 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers