TensorFlow学习--张量的数据类型/rank/shape和常用API
2017-10-25 18:53
926 查看
TensorFlow即张量的流动,即保持计算节点不变让数据以张量的形式进行流动.张量tensor可以是一个变量/数组/多维数组等.一个tensor包含一个静态的rank和一个shape.
tensor的几个重要属性:
设置存储类型:
输出:
零阶张量即纯量;
s = 256
一阶张量可看作为向量,可用t[i]来访问其元素;
v = [1.1, 2.2, 3.3]
二阶张量可看做为矩阵,可用t[i,j]来访问其元素;
m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
三阶张量可用t[i,j,k]来访问其元素;
t = [[[2], [4], [6]], [[8], [10], [12]], [[14], [16], [18]]]
cf0e
br>
0-D(一个 0维张量. 一个纯量.):scalar shape为[];
1-D(一个1维张量的形式[D0]):vector shape为 [D0];
2-D(一个2维张量的形式[D0, D1]):matrix shape为 [D0,D1];
.
输出:
.
输出:
输出:
其中张量t的形式为:
注意指定张量中元素的dtype类型.
张量中的元素对应关系:
如,1个4行4列3维的张量a中,查看其中第1行第2列第3维和第2行第1列第2维的元素:
输出:
tensor的几个重要属性:
Data type/数据类型
即tensor存储的数据类型.数据类型 | Python 类型 | 描述 |
---|---|---|
DT_FLOAT | tf.float32 | 32 位浮点数 |
DT_DOUBLE | tf.float64 | 64 位浮点数 |
DT_INT64 | tf.int64 | 64 位有符号整型 |
DT_INT32 | tf.int32 | 32 位有符号整型 |
DT_INT16 | tf.int16 | 16 位有符号整型 |
DT_INT8 | tf.int8 | 8 位有符号整型 |
DT_UINT8 | tf.uint8 | 8 位无符号整型 |
DT_STRING | tf.string | 可变长度的字节数组.每一个张量元素都是一个字节数组 |
DT_BOOL | tf.bool | 布尔型 |
DT_COMPLEX64 | tf.complex64 | 由两个32位浮点数组成的复数:实数和虚数 |
DT_QINT32 | tf.qint32 | 用于量化Ops的32位有符号整型 |
DT_QINT8 | tf.qint8 | 用于量化Ops的8位有符号整型 |
DT_QUINT8 | tf.quint8 | 用于量化Ops的8位无符号整型 |
import tensorflow as tf a = tf.zeros((2, 2), dtype=tf.float16) print a
输出:
Tensor("zeros:0", shape=(2, 2), dtype=float16)
Rank/阶
Rank:tensor的维数,即张量是几维的数组.(直观上看就是括了几层括号)零阶张量即纯量;
s = 256
一阶张量可看作为向量,可用t[i]来访问其元素;
v = [1.1, 2.2, 3.3]
二阶张量可看做为矩阵,可用t[i,j]来访问其元素;
m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
三阶张量可用t[i,j,k]来访问其元素;
t = [[[2], [4], [6]], [[8], [10], [12]], [[14], [16], [18]]]
Shape/形状
tensor的形状. <cf0e
br>
0-D(一个 0维张量. 一个纯量.):scalar shape为[];
1-D(一个1维张量的形式[D0]):vector shape为 [D0];
2-D(一个2维张量的形式[D0, D1]):matrix shape为 [D0,D1];
阶 | 形状 | 维数 | 实例 |
---|---|---|---|
0 | [ ] | 0-D | 一个 0维张量. 一个纯量 |
1 | [D0] | 1-D | 一个1维张量的形式[5] |
2 | [D0, D1] | 2-D | 一个2维张量的形式[3, 4] |
3 | [D0, D1, D2] | 3-D | 一个3维张量的形式 [1, 4, 3] |
n | [D0, D1, … Dn] | n-D | 一个n维张量的形式 [D0, D1, … Dn] |
import tensorflow as tf a = tf.zeros([1, 2, 2]) print a
输出:
Tensor("zeros:0", shape=(1, 2, 2), dtype=float32)
常用API
与Tensor相关的常用的API主要有:操作 | 描述 |
---|---|
tensor.eval() | 张量的值 |
tensor.dtype | 张量的数据类型 |
tensor.name | 张量的名字 |
tensor.graph | 张量所在的图 |
tensor.op | 产生该张量的操作 |
#!/usr/bin/python # coding:utf-8 import tensorflow as tf t0 = tf.Variable(tf.random_normal([1, 3, 2, 3]), name='t') t1 = tf.Variable(tf.random_normal([1, 3, 2, 3]), name='t') t2 = tf.Variable(tf.random_normal([1, 3, 2, 3]), name='t') # 初始化变量 init = tf.initialize_all_variables() # 启动默认图 with tf.Session() as sess: sess.run(init) # 张量的值 print "t0.eval():\n", t0.eval() # 张量的数据类型 print "t0.dtype:\n", t0.dtype # 张量的名字 print "t0.name:\n", t0.name # 重名时加序号区分 print "t2.name:\n", t2.name # 张量所在的图 print "t0.graph:\n", t0.graph # 产生该张量的操作 print "t0.op:\n", t0.op
输出:
t0.eval(): [[[[-0.55077618 1.64050066 -1.32940078] [ 1.74692714 0.11233041 1.51372337]] [[ 0.15455215 -0.38469273 2.4409039 ] [-0.51784748 0.62258196 -0.74489498]] [[ 1.00270367 2.20758677 -0.10242216] [ 0.56432706 0.9625718 -0.76739138]]]] t0.dtype: <dtype: 'float32_ref'> t0.name: t:0 t2.name: t_2:0 t0.graph: <tensorflow.python.framework.ops.Graph object at 0x7faa4c958610> t0.op: name: "t" op: "VariableV2" attr { key: "container" value { s: "" } } attr { key: "dtype" value { type: DT_FLOAT } } attr { key: "shape" value { shape { dim { size: 1 } dim { size: 3 } dim { size: 2 } dim { size: 3 } } } } attr { key: "shared_name" value { s: "" } }
张量的形式
生成1个4行2列3维/通道的张量t和1个4行3列2维的张量b:import tensorflow as tf t = tf.Variable(tf.random_normal([1, 4, 2, 3])) b = tf.Variable([[[[1, 1], [1, 1], [1, 1]], [[1, 1], [1, 1], [1, 1]], [[1, 1], [1, 1], [1, 1]], [[1, 1], [1, 1], [1, 1]]]], dtype=tf.float32) init = tf.initialize_all_variables() with tf.Session() as sess: sess.run(init) print t.eval() print b.eval() print b.shape
输出:
[[[[ -0.94044793 -1.46241128 1.05189145] [ -0.4611243 -2.49165058 -0.82913154]] [[ 1.01612628 -0.21953523 -0.82144296] [ -0.61173284 0.45760757 -1.30645704]] [[ -1.89634395 -0.20555718 -2.55326843] [ -0.62727648 0.24829486 0.45809004 ]] [[ -0.25653574 1.29294693 0.00365613] [ 0.45901382 -0.72672909 0.46698001]]]] [[[[ 1. 1.] [ 1. 1.] [ 1. 1.]] [[ 1. 1.] [ 1. 1.] [ 1. 1.]] [[ 1. 1.] [ 1. 1.] [ 1. 1.]] [[ 1. 1.] [ 1. 1.] [ 1. 1.]]]] (1, 4, 3, 2)
其中张量t的形式为:
注意指定张量中元素的dtype类型.
张量中的元素对应关系:
如,1个4行4列3维的张量a中,查看其中第1行第2列第3维和第2行第1列第2维的元素:
import tensorflow as tf a = tf.Variable([[[[1, 2, 3], [1.5, 2.5, 3.5], [1, 1, 1], [1, 1, 1]], [[10, 20, 30], [1, 1, 1], [1, 1, 1], [1, 1, 1]], [[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]], [[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]]], dtype=tf.float32) init = tf.initialize_all_variables() with tf.Session() as sess: sess.run(init) print a.eval() print a.shape print a.eval()[0, 0, 1, 2] print a.eval()[0, 1, 0, 1]
输出:
[[[[ 1. 2. 3. ] [ 1.5 2.5 3.5] [ 1. 1. 1. ] [ 1. 1. 1. ]] [[ 10. 20. 30. ] [ 1. 1. 1. ] [ 1. 1. 1. ] [ 1. 1. 1. ]] [[ 1. 1. 1. ] [ 1. 1. 1. ] [ 1. 1. 1. ] [ 1. 1. 1. ]] [[ 1. 1. 1. ] [ 1. 1. 1. ] [ 1. 1. 1. ] [ 1. 1. 1. ]]]] (1, 4, 4, 3) 3.5 20.0
相关文章推荐
- JAVA学习第三十二课(常用对象API)- 基本数据类型对象包装类
- Objective-C中基本数据烦类型与对象数据类型相互转换的方法(OC中NSString的常用API的基础应用3)
- 在学习位图中遇到的一些常用的数据类型
- oracle学习笔记--常用数据类型及函数
- Oracle学习(三)--数据类型及常用sql语句
- Mysql常用数据类型详细说明及实例说明(学习笔记一)
- PostgreSQL学习手册(常用数据类型)
- Redis学习和应用记录(2)--常用数据类型及命令
- 每日学习心得:Js基本数据类型常用方法扩展
- NoSQL初探之人人都爱Redis:(2)Redis API与常用数据类型简介
- Java笔记九.常用APIの数据类型包装类
- PostgreSQL学习手册(常用数据类型)
- PostgreSQL学习手册(常用数据类型)
- Oracle学习(三)--数据类型及常用sql语句
- PostgreSQL学习手册(四) 常用数据类型
- PostgreSQL学习手册(常用数据类型)
- 黑马程序员——常用API(StringBuilder和StringBuffer以及基本数据类型包装类)
- 常用对象API(基本数据类型对象包装类的概述和字符串转换成基本数值)
- Redis学习笔记(三) Redis API与常用数据类型简介
- PostgreSQL学习手册(常用数据类型)