Ch4.TensorFlow基本操作2-创建Tensor

TensorFlow基本操作2

重点函数

数据类型转换为tensor:
tf.convert_to_tensor()
tf.constant()

tf.convert_to_tensor(a)

tf.constant(a)

都能够自动的把 Numpy 数组或者 Python List 数据类型转化为 Tensor 类型

创建全 0,全 1 张量:
tf.zeros()
tf.ones()

tf.zeros()

tf.ones()

创建建与某个张量 shape 一致,内容全 0 或全 1 的张量:
tf.zeros_like()
tf.ones_like()

a = tf.ones([2,3])
tf.zeros_like(a)
tf.ones_like(a)

创建自定义数值张量:
tf.fill(shape, value)

tf.fill(shape, value)

tf.fill([2,2], 99)

初始化正态分布:
tf.random.normal(shape, mean=0.0, stddev=1.0)

tf.random.normal(shape, mean=0.0, stddev=1.0)

//默认均值为 0,标准差为 1
tf.random.normal([2,2])
tf.random.normal([2,2], mean=1,stddev=2)

截断的正态分布:
tf.random.truncated_normalnormal(shape, mean=1,stddev=0)

tf.random.truncated_normalnormal([10,2],mean=1,stddev=2)

初始化均匀分布:
tf.random.uniform(shape, minval=0, maxval=None, dtype=tf.float32)

tf.random.uniform(shape, minval=0, maxval=None, dtype=tf.float32)

tf.random.uniform([2,2])
//默认采样自区间为 [0,1]
tf.random.uniform([2,2],maxval=10)
tf.random.uniform([2,2],maxval=100,dtype=tf.int32)

创建序列:
tf.range(limit, delta=step)

tf.range(limit, delta=1)

tf.range(10)
tf.range(10,delta=2)
tf.range(1,10,delta=2)

注意 shape 的大小:

a = tf.ones(1)
(1,)

a = tf.ones([1])
(1,)

a = tf.ones([])
()

随机打乱:
tf.random.shuffle(id)

id = tf.range(10)
// tf.Tensor([0 1 2 3 4 5 6 7 8 9], shape=(10,), dtype=int32)
idx = tf.random.shuffle(id)
// tf.Tensor([2 0 5 3 6 1 4 8 7 9], shape=(10,), dtype=int32)

// 原始 id 不会变,所以需要一个变量来接收打乱后的数据

将打乱后的 data 和 label 对应上:
tf.gather(a,idx)

a = tf.gather(a,idx)
b = tf.gather(b,idx)

4 创建张量

4.1 从 Numpy, List 对象创建

Numpy Array 数组和 Python List 是 Python 程序中间非常重要的数据载体容器,很多数 据都是通过 Python 语言将数据加载至 Array 或者 List 容器,再转换到 Tensor 类型,通过 TensorFlow 运算处理后导出到 Array 或者 List 容器,方便其他模块调用。
通过 tf.convert_to_tensor 可以创建新 Tensor,并将保存在 Python List 对象或者 Numpy Array 对象中的数据导入到新 Tensor 中:

In [22]:
tf.convert_to_tensor([1,2.])
Out[22]:
<tf.Tensor: id=86, shape=(2,), dtype=float32, numpy=array([1., 2.], dtype=float32)>

In [23]:
tf.convert_to_tensor(np.array([[1,2.],[3,4]]))
Out[23]:
<tf.Tensor: id=88, shape=(2, 2), dtype=float64, numpy= array([[1., 2.], [3., 4.]])>

需要注意的是,Numpy 中浮点数数组默认使用 64-Bit 精度保存数据,转换到 Tensor 类型时
精度为 tf.float64,可以在需要的时候转换为 tf.float32 类型。
实际上,tf.constant()tf.convert_to_tensor()都能够自动的把 Numpy 数组或者 Python
List 数据类型转化为 Tensor 类型,这两个 API 命名来自 TensorFlow 1.x 的命名习惯,在
TensorFlow 2 中函数的名字并不是很贴切,使用其一即可

4.2 创建全 0,全 1 张量

tf.zeros()
tf.ones()

向量(vector)
创建全 0 和全 1 的向量(vector):
tf.zeros([1]),tf.ones([1])

矩阵(matrix)
创建全 0 的矩阵(matrix):
tf.zeros([2,2])
创建全 1 的矩阵(matrix):
tf.ones([3,2])

通过 tf.zeros_like, tf.ones_like 可以方便地新建与某个张量 shape 一致,内容全 0 或全 1
的张量。例如,创建与张量 a 形状一样的全 0 张量:

a = tf.ones([2,3])
tf.zeros_like(a)
tf.ones_like(a)

tf.*_like 是一个便捷函数,可以通过 tf.zeros(a.shape)等方式实现。

4.3 创建自定义数值张量

除了初始化为全 0,或全 1 的张量之外,有时也需要全部初始化为某个自定义数值的张量,比如将张量的数值全部初始化为-1 等。
通过 tf.fill(shape, value)可以创建全为自定义数值 value 的张量。

创建元素为 -1 的标量:

tf.fill([], -1)

创建所有元素为-1 的向量:

tf.fill([1], -1)

创建所有元素为 99 的矩阵:

tf.fill([2,2], 99)

4.4 创建已知分布的张量

正态分布(Normal Distribution,或 Gaussian Distribution)和均匀分布(Uniform Distribution)是最常见的分布之一,创建采样自这 2 种分布的张量非常有用,比如在卷积神经网络中,卷积核张量 W 初始化为正态分布有利于网络的训练;在对抗生成网络中,隐藏变量 z 一般采样自均匀分布。

通过 tf.random.normal(shape, mean=0.0, stddev=1.0)可以创建形状为 shape,均值为 mean,标准差为 stddev 的正态分布𝒩(𝑚𝑒𝑎𝑛, 𝑠𝑡𝑑𝑑𝑒𝑣2)。

正态分布(Normal Distribution)
创建均值为 0,标准差为 1 的正太分布:

tf.random.normal([2,2])

创建均值为 1,标准差为 2 的正太分布:

tf.random.normal([2,2], mean=1,stddev=2)

截断的正态分布

tf.random.truncated_normalnormal([10,2],mean=1,stddev=2)

均匀分布(Uniform Distribution)
通过 tf.random.uniform(shape, minval=0, maxval=None, dtype=tf.float32)可以创建采样自[𝑚𝑖𝑛𝑣𝑎𝑙, 𝑚𝑎𝑥𝑣𝑎𝑙]区间的均匀分布的张量。

创建采样自区间[0,1],shape 为[2,2]的矩阵:

tf.random.uniform([2,2])

创建采样自区间[0,10],shape 为[2,2]的矩阵:

tf.random.uniform([2,2],maxval=10)

如果需要均匀采样整形类型的数据,必须指定采样区间的最大值 maxval 参数,同时制定数据类型为 tf.int* 型:

tf.random.uniform([2,2],maxval=100,dtype=tf.int32)

4.5 创建序列

在循环计算或者对张量进行索引时,经常需要创建一段连续的整形序列,可以通过
tf.range()函数实现。tf.range(limit, delta=1)可以创建[0,𝑙𝑖𝑚𝑖𝑡)之间,步长为 delta 的整形序列,不包含 limit 本身。

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

tf.range(10)

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

tf.range(10,delta=2)

通过 tf.range(start, limit, delta=1)可以创建[𝑠𝑡𝑎𝑟𝑡, 𝑙𝑖𝑚𝑖𝑡),步长为 delta 的序列,不包含 limit本身:

tf.range(1,10,delta=2)

随机打乱

id = tf.range(10)
// tf.Tensor([0 1 2 3 4 5 6 7 8 9], shape=(10,), dtype=int32)
idx = tf.random.shuffle(id)
// tf.Tensor([2 0 5 3 6 1 4 8 7 9], shape=(10,), dtype=int32)

典型维度的数据

scalar

[]
loss
accauracy

vector

Bias

matrix

input_x: [batches ,vec_dim]
weight: [input_dim, output_dim]

Dim = 3 Tensor

x: [batches, seq_len, word_dim]

Dim = 4 Tensor

Image: [batches, height, width, 3]
feature maps: [b, h, w, channal]

Dim = 5 Tensor

single task: [b, h, w, 3]
meta-learning: [task_b, b, h, w, 3]

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

推荐阅读更多精彩内容