第四章 TensorFlow 基础 笔记1

这一章介绍TensorFlow中的所有运算操作。

4.1 数据类型

TensorFlow中的基本数据类型:数值型,字符串型和布尔型。

4.1.1 数值类型

  • 标量
#创建标量
a = tf.constant(1.2)
  • 向量
    与标量不同,向量的定义须通过List类型传给 tf.constant()。
#创建向量
x = tf.constant([1, 2, 3.3])
x
#输出结果为
<tf.Tensor: id=1, shape=(3,), dtype=float32, 
numpy=array([1. , 2. , 3.3], dtype=float32)>

其中:id 是TensorFlow中内部索引对象的编号,shape表示张量的形状,dtype表示张量的数值精度,张量nimpy()方法可以返回 Numpy.array 类型的数据

x.numpy()
#输出结果为
array([1. , 2. , 3.3], dtype=float32)
  • 矩阵
a = tf.constant([[1, 2],[3, 4]])
  • 张量
    3维张量可以定义为:
a = tf.constant([[[1,2],[3,4]],[[5,6],[7,8]]])
a
#输出的结果为
<tf.Tensor: id=5, shape=(2, 2, 2), dtype=int32, numpy=
array([[[1, 2],
        [3, 4]],

       [[5, 6],
        [7, 8]]])>

4.1.2 字符串类型

a = tf.constant('Hello, Deep Learning.')
a
#输出的结果为
<tf.Tensor: id=6, shape=(), dtype=string, numpy=b'Hello, Deep Learning.'>
tf.string.lower(a)
#输出结果为
<tf.Tensor: id=7, shape=(), dtype=string, numpy=b'hello, deep learning.'>

书上说:


字符串类型图

之后,或许抽时间去看看 tf.strings API总结一下吧

4.1.3 布尔值类型

为了方便表达比较运算操作的结果,TensorFlow 还支持布尔类型(Boolean,bool)的张量。
布尔类型的张量只需要传入Python语言的布尔类型数据,转换成TensorFlow内部布尔类型

a = tf.constant(True)
#输出的结果为
<tf.Tensor: id=8, shape=(), dtype=bool, numpy=True>

4.2 数值精度

对于大部分深度学习算法,一般使用 tf.int32,tf.float32可满足运算精度要求;部分对精度要求较高的算法,如强化学习,可以选择使用 tf.int64,tf.float64精度保存张量。

tf.constant(123456789, dtype = tf.int32)
<tf.Tensor: id=19, shape=(), dtype=int32, numpy=123456789>

4.2.1 读取精度

通过访问张量的 dtype 成员属性可以判断张量的保存精度。

a = tf.constant(123456789, dtype = tf.int32)
a.dtype
#输出的结果为
tf.int32

通过 tf.dtypes.cast 修改张量的 dtype 属性。

tf.dtypes.cast(
      x,
      dtype,
      name=None
)
x = tf.constant([1.8, 2.2], dtype = tf.float32)
tf.dtypes.cast(x, dtype = tf.int32)
#输出结果为
<tf.Tensor: id=22, shape=(2,), dtype=int32, numpy=array([1, 2])>

4.3 待优化张量

为了区分需要计算梯度信息的张量与不需要计算梯度信息的张量,TensorFlow增加了 tf.Variable 数据类型来支持梯度信息的记录。

tf.Variable 类型在普通的张量类型基础上添加了 name,trainable 等属性来支持计算图的构建

a = tf.constant([-1, 0, 1, 2])
aa = tf.Variable(a)
aa.name, aa.trainable
# 输出的结果为
('Variable:0', True)

其中:name 属性是用于命名计算图中的变量,这套命名体系是 TensorFlow 内部维护的,一般不需要用户关注 name 属性 (但是,在自己写一个自定义的layers,在 bulid 函数中 name 是不可或缺的);trainable 表征当前张量是否需要被优化,创建 Variable 对象是默认启用优化的标志,可以设置 trainable = False 来设置张量不需要被优化。

还可以直接创建 tf.Variable

a = tf.Variable([[1,2],[3,4]])
a
# 输出结果为
<tf.Variable 'Variable:0' shape=(2, 2) dtype=int32, numpy=
array([[1, 2],
       [3, 4]])>

4.4 创建张量

4.4.1 从Numpy,List对象创建

Numpy Array 数组和 Python List 需要通过 tf.convert_to_tensor 转换到 Tensor 类型。

tf.convert_to_tensor([1,2.])
#输出结果为
<tf.Tensor: id=39, shape=(2,), dtype=float32, numpy=array([1., 2.], dtype=float32)>
In [ ]:
tf.convert_to_tensor(np.array([[1,2],[3,4]]))
#输出结果为
<tf.Tensor: id=40, shape=(2, 2), dtype=int32, numpy=
array([[1, 2],
       [3, 4]])>

4.4.2 创建全0,全1张量

tf.zeros() 和 tf.ones()

4.4.3 创建自定义数值张量

有时需要全部初始化为某个自定义数值张量,比如将张量的数值全部初始化为-1等。
可以通过 tf.fill创建全为自定义数值的张量。

tf.fill(
    dims,
    value,
    name=None)
#标量
tf.fill([],-1)
#输出结果为
<tf.Tensor: id=43, shape=(), dtype=int32, numpy=-1>
#向量
tf.fill([2],-1)
#输出结果为
<tf.Tensor: id=46, shape=(2,), dtype=int32, numpy=array([-1, -1])>
#矩阵
tf.fill([5,6],-1)
#输出结果为
<tf.Tensor: id=49, shape=(5, 6), dtype=int32, numpy=
array([[-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.4 创建已知分布的张量

通过 tf.random.normal 和 tf.random.uniform 创建正态分布(Normal Distribution 或者 Gaussian Distribution)和高斯分布(Uniform Distribution)。

tf.random.normal(
      shape,
      mean = 0.0,
      stddv = 1.0,
      dtype = tf.dtypes.float32,
      seed = None,
      name = None
)
tf.random.uniform(
      shape,
      minval = 0,
      maxval = None,
      dtype = tf.dtypes.float32,
      seed = None,
      name = None
)
tf.random.normal([2,2])
#输出结果为
<tf.Tensor: id=55, shape=(2, 2), dtype=float32, numpy=
array([[-1.1263858 ,  0.87060237],
      [-0.45420638, -0.32954565]], dtype=float32)>
tf.random.normal([2,2],mean = 1,stddev=2)
#输出结果为
<tf.Tensor: id=61, shape=(2, 2), dtype=float32, numpy=
array([[4.8935857, 2.1483226],
      [0.5717739, 2.2051687]], dtype=float32)>
tf.random.uniform([2,2])
#输出结果为
<tf.Tensor: id=68, shape=(2, 2), dtype=float32, numpy=
array([[0.8220825 , 0.3613026 ],
       [0.8072839 , 0.47967374]], dtype=float32)>
tf.random.uniform([2,2], maxval=100, dtype= tf.int32)
#输出结果为
<tf.Tensor: id=83, shape=(2, 2), dtype=int32, numpy=
array([[15, 91],
       [ 1, 25]])>

4.4.5 创建序列

tf.range(
      start,
      limits,
      delta = 1,
      dtype = None,
      name = 'range',
)

通过 tf.range() 函数可以创建 [0, limit)之间,步长为 delta 的整形序列,不包含 limit本身。

创建0~9,步长为1的整形序列:

tf.range(10)
#输出结果为
<tf.Tensor: id=92, shape=(10,), dtype=int32, numpy=array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>

4.5 张量的典型应用

  • 标量
    标量的维度数为0,shape 为 []。它的典型用途之一是误差值的表示,各种测量指标的表示,比如准确度(Accuracy, acc),精度(Precision)和召回率(Recell)等。

  • 向量
    例如全连接层和卷积神经网络层中,偏置张量\mathbf{b}就是使用向量表示的。

  • 矩阵
    神经网络的权重矩阵就是用矩阵表示的。

  • 3维张量
    三维张量一个典型应用是表示序列信号,它的格式是 X = [b, sequence\; len, feature\; len]b是序列信号的数量,sequence\; len是序列信号在时间维度上的采样点数,feature\; len表示每个点的特征长度。)

  • 4维张量
    四维张量在卷积神经网络中应用的非常广泛,格式一般定义为:
    [b,h,w,c]
    其中:b是输入的数量,h,w分别表示特征图的高宽,c表示特征图通道数。

参考资料:https://github.com/dragen1860/Deep-Learning-with-TensorFlow-book

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容