浅谈TensorFlow之稀疏张量表示


Posted in Python onJune 30, 2020

对于多维的稀疏数据,TensorFlow 支持 SparseTensor 表示。

官方文档地址:https://tensorflow.google.cn/api_guides/python/sparse_ops

构造稀疏张量

SparseTensor(indices, values, dense_shape)

indices是一个维度为(n, ndims)的2-D int64张量,指定非零元素的位置。比如indices=[[1,3], [2,4]]表示[1,3]和[2,4]位置的元素为非零元素。n表示非零元素的个数,ndims表示构造的稀疏张量的维数。

values是一个维度为(N)的1-D张量,对应indices所指位置的元素值。

dense_shape是一个维度为(ndims)的1-D张量,代表稀疏张量的维度。

tf.SparseTensor(indices=[[0, 0], [1, 2]], values=[1, 2], dense_shape=[3, 4])
>>
[[1, 0, 0, 0]
 [0, 0, 2, 0]
 [0, 0, 0, 0]]

转换

将稀疏张量转为普通矩阵。

tf.sparse_to_dense(
sparse_indices,
output_shape,
sparse_values,
default_value=0,
validate_indices=True,
name=None
)

sparse_indices是那些非零元素的位置。

sparse_indices是实数,该矩阵为一维矩阵,指定一维矩阵的某一个元素位置

sparse_indices是向量,该矩阵为一维矩阵,指定一维矩阵的多个元素

sparse_indices是二维矩阵,该矩阵为多维矩阵,指定多维矩阵的多个元素。

output_shape是矩阵的维度。

sparse_value是对应sparse_indices所指位置的元素值。

default_value是未指定元素的默认值,一般为0。

import tensorflow as tf 

mysparse_indices = tf.constant(5)
mymatrix = tf.sparse_to_dense(mysparse_indices, [11], 10)
with tf.Session() as sess:
  result = sess.run(mymatrix)
  print(result)

//[0 0 0 0 0 10 0 0 0 0 0]

SparseTensor和SparseTensorValue

两者的参数相同。

在计算图中定义稀疏张量时,使用SparseTensor;在feed数据时使用SparseTensorValue。

补充知识:彻底搞懂tensorflow里的张量(tensor)

1.引言

学习卷积神经网络(CNN)的时候,最重要的就是搞清楚网络各层的神经元输入输出的数据结构(即张量)。如果仅用线性代数所学的矩阵,向量来理解张量,一定会搞得一头雾水。因此很有必要搞清楚张量是什么东西。

首先明确:张量最主要的两个参数: rank(阶,或维数)、shape(形状)

2.什么是张量

下图是张量的直观的示意:张量是标量、向量、矩阵的集合和推广。

浅谈TensorFlow之稀疏张量表示

3.什么是rank

rank 数学实例 Python 例子
0 纯数字(只有大小) s=352
1 向量(1个基本向量) v = [1.1, 2.2, 3.3]
2 矩阵(两个基本向量) m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
3 数据立体(3个基本向量) t = [ [[2], [4], [6]] , [[8], [10], [12]] , [[14], [16], [18]] ]
n n个基本向量

可以发现:可以数括号[ ]的层数来确定张量的维数(阶)

什么是基本向量

基本向量(basis vector):几个basis vector就是从几个方面来描述一组数据。

举例说明:

一维张量:概念和向量完全一样。图中的白线就是一个向量,当然了,在三维空间向量有三个分向量(分别是x方向、y方向、z方向)

浅谈TensorFlow之稀疏张量表示

二维张量:对下面这个长方形施加一个力,怎么来描述?

我们把可以把这个长方形就xoy、xoz、yoz三个平面截下来,之后在每一个平面上再分析受力情况。

两个basis vector出来了:一个用来描述截面方向(这是一个三维向量);另一个用来描述此截面的受力情况(当然这也是一个三维向量)

浅谈TensorFlow之稀疏张量表示

那么我们可以用作用在yoz平面(此平面的法向量是x轴单位向量),受力的x轴分量用Pxx来表示,以此推广到含有9个元素的矩阵,这就是一个2维张量。

换句话来解释:在一个三维空间,我们从2个基本向量来描述一个东西,那么这个张量所含有的元素个数应该是3的2次方等于9个。每个元素能得到2个基本向量的注释。这就是一个2维的张量

浅谈TensorFlow之稀疏张量表示

三维张量:

继续推广,每个元素有三个基本向量注释。三维的张量形状就像是叠起来的矩阵。

浅谈TensorFlow之稀疏张量表示

最后品一品这句话

浅谈TensorFlow之稀疏张量表示

4.什么是shape

shape指明每一层有多少个元素。

比如[2,3,4]是指第一层2个元素,第二层3个元素,第三层4个元素,通过这个我们就可以知道这个张量一共有2 × 3 × 4=24 个元素。而且它有3层,因此可以知道这个张量的rank=3

注意:读取元素,从外括号往内括号读

下面这个代码也能说明问题。

import tensorflow as tf
# 定义了一个张量,有6个元素,设置他的形状是[2.3]
a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2,3])
with tf.Session() as session:
  print(session.run(a))

打印的结果是

[[1 2 3] [4 5 6]]

以上这篇浅谈TensorFlow之稀疏张量表示就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python判断字符串是否纯数字的方法
Nov 19 Python
Python import用法以及与from...import的区别
May 28 Python
python利用datetime模块计算时间差
Aug 04 Python
详解Python pygame安装过程笔记
Jun 05 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
Jan 15 Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 Python
一篇文章搞懂Python的类与对象名称空间
Dec 10 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
python excel转换csv代码实例
Aug 26 Python
pandas 空数据处理方法详解
Nov 02 Python
基于python 将列表作为参数传入函数时的测试与理解
Jun 05 Python
pytorch使用horovod多gpu训练的实现
Sep 09 Python
tensorflow图像裁剪进行数据增强操作
Jun 30 #Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 #Python
Python openpyxl模块实现excel读写操作
Jun 30 #Python
tensorflow下的图片标准化函数per_image_standardization用法
Jun 30 #Python
Python的控制结构之For、While、If循环问题
Jun 30 #Python
关于tensorflow softmax函数用法解析
Jun 30 #Python
基于tensorflow for循环 while循环案例
Jun 30 #Python
You might like
从Web查询数据库之PHP与MySQL篇
2009/09/25 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
PHP中使用imagick实现把PDF转成图片
2015/01/26 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
PHP实现移除数组中为空或为某值元素的方法
2017/01/07 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
javascript 年月日联动实现核心代码
2009/12/21 Javascript
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
JS高级笔记
2011/07/13 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
angular6的响应式表单的实现
2018/10/10 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
[02:34]DOTA2英雄基础教程 幽鬼
2014/01/02 DOTA
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
[01:11:32]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python中的字典使用分享
2016/07/31 Python
python爬虫_实现校园网自动重连脚本的教程
2018/04/22 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
python3中编码获取网页的实例方法
2020/11/16 Python
HTML5 Canvas 起步(1) - 基本概念
2009/05/12 HTML / CSS
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
浅谈redis整数集为什么不能降级
2021/07/25 Redis