day5-张量数据结构

Tensorflow的核心概念

tensorflow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。
节点(Nodes)在图中表示数学操作,图中的线(edges)表示节点间互相联系的多维数据数组,即张量(tensor)。
它灵活的架构可以在多种平台上展开计算。
Tensorflow的优点:
1、灵活性:支持底层数值计算,C++自定义操作符
2、可移植性:从服务器到PC到手机,从CPU到GPU到TPU
3、分布式计算:分布式并行计算,可指定操作符对应计算设备
Tensorflow底层最核心的概念是张量,计算图以及自动微分。

张量数据结构

程序 = 数据结构+算法。TensorFlow程序 = 张量数据结构 + 计算图算法语言
张量和计算图是 TensorFlow的核心概念。
Tensorflow的基本数据结构是张量Tensor。张量即多维数组。Tensorflow的张量和numpy中的array很类似。
从行为特性来看,有两种类型的张量,常量constant和变量Variable.
常量的值在计算图中不可以被重新赋值,变量可以在计算图中用assign等算子重新赋值。

一、常量张量

张量的数据类型和numpy.array基本一一对应

import numpy as np
import tensorflow as tf

i = tf.constant(1)             # tf.int32 类型常量
l = tf.constant(1,dtype = tf.int64)           # tf.int64 类型常量
f = tf.constant(1.23)         #tf.float32 类型常量
d = tf.constant(3.14,dtype = tf.double)       # tf.double 类型常量
s = tf.constant("hello world")           # tf.string类型常量
b = tf.constant(True)                 #tf.bool类型常量

print(tf.int64 == np.int64)               # True
print(tf.bool == np.bool)                 # True
print(tf.double == np.float64)            # True
print(tf.string == np.unicode)       # False, tf.string类型和np.unicode类型不等价

总结:
不同类型的数据可以用不同维度(rank)的张量来表示。
标量为0维张量,向量为1维张量,矩阵为2维张量。
彩色图像有rgb三个通道,可以表示为3维张量。
视频还有时间维,可以表示为4维张量。
可以简单地总结为:有几层中括号,就是多少维的张量。

tf.rank的作用和numpy的ndim方法相同
### 标量,0维张量
scalar = tf.constant(True)

# tf.rank的作用和numpy的ndim方法相同
print(tf.rank(scalar))      # tf.Tensor(0, shape=(), dtype=int32)
print(scalar.numpy().ndim)  # 0

### 向量,1维张量
vector = tf.constant([1.0, 2.0, 3.0, 4.0])
print(tf.rank(vector))      # tf.Tensor(1, shape=(), dtype=int32)
print(np.ndim(vector.numpy()))  # 1

### 矩阵,2维张量
matrix = tf.constant([[1.0,2.0],[3.0,4.0]])
print(tf.rank(matrix))      # tf.Tensor(2, shape=(), dtype=int32)
print(tf.rank(matrix).numpy())  # 2
print(np.ndim(matrix))          # 2
print(np.ndim(matrix.numpy()))  # 2

### 3维张量
tensor3 = tf.constant([[[1.0,2.0],[3.0,4.0]],[[5.0,6.0],[7.0,8.0]]])
# print(tensor3)
print(tf.rank(tensor3))     # tf.Tensor(3, shape=(), dtype=int32)
print(tf.rank(tensor3).numpy()) # 3
print(np.ndim(tensor3))         # 3
tf.cast改变张量的数据结构

可以用numpy方法将tensorflow中的张量转化成numpy中的张量。
可以用shape方法查看张量的尺寸。

h = tf.constant([123,456],dtype = tf.int32)
f = tf.cast(h, tf.float32)
print(h.dtype, f.dtype)           # <dtype: 'int32'> <dtype: 'float32'>

y = tf.constant([[1.0,2.0],[3.0,4.0]])
print(y.numpy())            # 转换成np.array
print(y.shape)              # (2, 2)

u = tf.constant(u"你好 世界")
print(u.numpy())        # b'\xe4\xbd\xa0\xe5\xa5\xbd \xe4\xb8\x96\xe7\x95\x8c'
print(u.numpy().decode("utf-8"))    # 你好 世界
print(u.shape)          # () 标量的尺寸就是这个
print(u.dtype)          # <dtype: 'string'>
二、变量张量

模型中需要被训练的参数一般被设置成变量

# 常量值不可以改变,常量的重新赋值相当于创造新的内存空间
c = tf.constant([1.0,2.0])
print(c)        # tf.Tensor([1. 2.], shape=(2,), dtype=float32)
print(id(c))    # 5276289568
c = c + tf.constant([1.0,1.0]) 
print(c)        # tf.Tensor([2. 3.], shape=(2,), dtype=float32)
print(id(c))    # 5276290240
# 变量的值可以改变,可以通过assign, assign_add等方法给变量重新赋值
v = tf.Variable([1.0,2.0],name = "v")
print(v)        # <tf.Variable 'v:0' shape=(2,) dtype=float32, numpy=array([1., 2.], dtype=float32)>
print(id(v))    # 5276259888
v.assign_add([1.0,1.0])
print(v)        # <tf.Variable 'v:0' shape=(2,) dtype=float32, numpy=array([2., 3.], dtype=float32)>
print(id(v))    # 5276259888
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355