TensorFlow学习--张量的数据类型/rank/shape和常用API

TensorFlow即张量的流动,即保持计算节点不变让数据以张量的形式进行流动.张量tensor可以是一个变量/数组/多维数组等.一个tensor包含一个静态的rank和一个shape.

tensor的几个重要属性:

Data type/数据类型

即tensor存储的数据类型.

数据类型Python 类型描述
DT_FLOATtf.float3232 位浮点数
DT_DOUBLEtf.float6464 位浮点数
DT_INT64tf.int6464 位有符号整型
DT_INT32tf.int3232 位有符号整型
DT_INT16tf.int1616 位有符号整型
DT_INT8tf.int88 位有符号整型
DT_UINT8tf.uint88 位无符号整型
DT_STRINGtf.string可变长度的字节数组.每一个张量元素都是一个字节数组
DT_BOOLtf.bool布尔型
DT_COMPLEX64tf.complex64由两个32位浮点数组成的复数:实数和虚数
DT_QINT32tf.qint32用于量化Ops的32位有符号整型
DT_QINT8tf.qint8用于量化Ops的8位有符号整型
DT_QUINT8tf.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的形状.
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
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值