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中lambda的用法及其与def的区别解析
Jul 28 Python
Python易忽视知识点小结
May 25 Python
详解在Python程序中自定义异常的方法
Oct 16 Python
如何在python中使用selenium的示例
Dec 26 Python
numpy.random.seed()的使用实例解析
Feb 03 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 Python
Python实现调用另一个路径下py文件中的函数方法总结
Jun 07 Python
django中账号密码验证登陆功能的实现方法
Jul 15 Python
Python手绘可视化工具cutecharts使用实例
Dec 05 Python
Python多线程Threading、子线程与守护线程实例详解
Mar 24 Python
详解Python requests模块
Jun 21 Python
python中取整数的几种方法
Nov 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
php使用pack处理二进制文件的方法
2014/07/03 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
JavaScript入门教程(3) js面向对象
2009/01/31 Javascript
jQuery的强大选择器小结
2009/12/27 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
js获取当前页面路径示例讲解
2014/01/08 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
Bootstrap源码解读排版(1)
2016/12/23 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
python自然语言编码转换模块codecs介绍
2015/04/08 Python
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
2019/02/25 Python
python 中xpath爬虫实例详解
2019/08/26 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
keras获得model中某一层的某一个Tensor的输出维度教程
2020/01/24 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
如何安装ruby on rails
2014/02/09 面试题
经济与贸易专业应届生求职信
2013/11/19 职场文书
仓库管理制度
2014/01/21 职场文书
五好党支部事迹材料
2014/02/06 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
php 原生分页
2021/04/01 PHP
linux中nohup和后台运行进程查看及终止
2021/06/24 Python
vue判断按钮是否可以点击
2022/04/09 Vue.js