浅谈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基础教程之实现石头剪刀布游戏示例
Feb 11 Python
跟老齐学Python之玩转字符串(2)
Sep 14 Python
win10系统中安装scrapy-1.1
Jul 03 Python
Numpy数组转置的两种实现方法
Apr 17 Python
Django添加sitemap的方法示例
Aug 06 Python
python tkinter实现界面切换的示例代码
Jun 14 Python
在Python中append以及extend返回None的例子
Jul 20 Python
python 怎样将dataframe中的字符串日期转化为日期的方法
Sep 26 Python
python打印n位数“水仙花数”(实例代码)
Dec 25 Python
pytorch:实现简单的GAN示例(MNIST数据集)
Jan 10 Python
Django中从mysql数据库中获取数据传到echarts方式
Apr 07 Python
Python趣味挑战之实现简易版音乐播放器
May 28 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
深入PHP autoload机制的详解
2013/06/09 PHP
php利用gd库为图片添加水印
2016/11/09 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
php和html的区别点详细总结
2019/09/24 PHP
设定php简写功能的方法
2019/11/28 PHP
jquery 可排列的表实现代码
2009/11/13 Javascript
dropdownlist之间的互相联动实现(显示与隐藏)
2009/11/24 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
Axios学习笔记之使用方法教程
2017/07/21 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
node简单实现一个更改头像功能的示例
2017/12/29 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
对python中大文件的导入与导出方法详解
2018/12/28 Python
python日期相关操作实例小结
2019/06/24 Python
python视频按帧截取图片工具
2019/07/23 Python
jupyter notebook实现显示行号
2020/04/13 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
俄罗斯EPL钻石珠宝店:ЭПЛ
2019/10/22 全球购物
应届生体育教师自荐信
2013/10/03 职场文书
化学工程专业求职信
2014/08/10 职场文书
村主任群众路线个人对照检查材料
2014/09/26 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
员工2014年度工作总结
2014/12/09 职场文书
涨价通知怎么写
2015/04/23 职场文书