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中文分词实现方法(安装pymmseg)
Jun 14 Python
Tensorflow使用支持向量机拟合线性回归
Sep 07 Python
Python 3.x基于Xml数据的Http请求方法
Dec 28 Python
详解python--模拟轮盘抽奖游戏
Apr 12 Python
Pytorch中的variable, tensor与numpy相互转化的方法
Oct 10 Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
Python 读取有公式cell的结果内容实例方法
Feb 17 Python
Django实现whoosh搜索引擎使用jieba分词
Apr 08 Python
Python是什么 Python的用处
May 26 Python
python 模拟登陆163邮箱
Dec 15 Python
python使用scapy模块实现ARP扫描的过程
Jan 21 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
php下关于中英数字混排的字符串分割问题
2010/04/06 PHP
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
php 生成唯一id的几种解决方法
2013/03/08 PHP
探讨:如何编写PHP扩展
2013/06/13 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
一起来写段JS drag拖动代码
2010/12/09 Javascript
JS实现可点击展开与关闭的左侧广告代码
2015/09/02 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
2016/02/03 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
2017/12/04 Javascript
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
基于vue 添加axios组件,解决post传参数为null的问题
2018/03/05 Javascript
vue文件树组件使用详解
2018/03/29 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
python实现用户登陆邮件通知的方法
2015/07/09 Python
python中list列表的高级函数
2016/05/17 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
scrapy爬虫完整实例
2018/01/25 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
几个Linux面试题笔试题
2016/08/01 面试题
股份转让协议书
2014/04/12 职场文书
医院义诊活动总结
2014/07/04 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
青年教师听课心得体会
2016/01/15 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
vue组件vue-esign实现电子签名
2022/04/21 Vue.js