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中实现对Timestamp和Datetime及UTC时间之间的转换
Apr 08 Python
Python网络编程中urllib2模块的用法总结
Jul 12 Python
python条件变量之生产者与消费者操作实例分析
Mar 22 Python
python正则表达式爬取猫眼电影top100
Feb 24 Python
django 修改server端口号的方法
May 14 Python
Python 打印中文字符的三种方法
Aug 14 Python
解决python中 f.write写入中文出错的问题
Oct 31 Python
python使用 __init__初始化操作简单示例
Sep 26 Python
使用 Python ssh 远程登陆服务器的最佳方案
Mar 06 Python
在 Pycharm 安装使用black的方法详解
Apr 02 Python
150行Python代码实现带界面的数独游戏
Apr 04 Python
Python如何在bool函数中取值
Sep 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高级OOP技术演示
2009/08/27 PHP
php中的三元运算符使用说明
2011/07/03 PHP
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
php正则表达式获取内容所有链接
2015/07/24 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
jquery如何获取复选框的值
2013/12/12 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
javascript属性访问表达式用法分析
2015/04/25 Javascript
ECMAScript6新增值比较函数Object.is
2015/06/12 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
微信小程序实现蓝牙打印
2019/09/23 Javascript
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
如何使用RoughViz可视化Vue.js中的草绘图表
2021/01/30 Vue.js
Python获取远程文件大小的函数代码分享
2014/05/13 Python
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
Python 由字符串函数名得到对应的函数(实例讲解)
2017/08/10 Python
virtualenv实现多个版本Python共存
2017/08/21 Python
基于spring boot 日志(logback)报错的解决方式
2020/02/20 Python
Python如何读写CSV文件
2020/08/13 Python
Python中pass的作用与使用教程
2020/11/13 Python
CSS3 transform的skew属性值图文详解
2014/07/21 HTML / CSS
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
行政处罚事先告知书
2015/07/01 职场文书
Go语言入门exec的基本使用
2022/05/20 Golang