【TensorFlow2.0】(2) 创建tensor的方法
各位同學好,今天和大家分享一下TensorFlow2.0中的tensor變量的創建方法。內容有:
(1) 通過numpy和list創建tensor;(2) 創建全部為某個值的tensor;(3) 隨機化創建:正態分布、均勻分布;(4) 重新洗牌;(5) tf.constant()
那我們開始吧。
1. 通過numpy和list創建tensor
方法: tf.convert_to_tensor(value, dtype=None)
np.ones([2,3]) 使用numpy創建2行3列全為1的數組,將該數組全部變成tensor類型,指定數據類型維tf.float32
import tensorflow as tf
import numpy as np
#(1)通過numpy和list創建tensor
# 將2行3列全為1的numpy類型數據轉換成tensor類型,原數據類型為float32
tf.convert_to_tensor(np.ones([2,3]),dtype=tf.float32)# 將2行3列全為0的numpy類型數據轉換成tensor類型,類型為float64
tf.convert_to_tensor(np.zeros([2,3]))
創建一個一維列表[2,3],和一個二維列表[[2],[2.]],轉換成tensor類型
注意:此處的convert_to_tensor([2,3]) 括號內代表data一維數組[2,3],一定要和下面第2、3節的方法區分開
# 將1維列表變成tensor類型,int32
tf.convert_to_tensor([2,3]) #得到1維長度為2的tensor
# 將2維列表變成tensor類型,float32
tf.convert_to_tensor([[2],[2.]])
2. 創建全為某種值的tensor
2.1 創建全為0的tensor
方法: tf.zeros([shape])
注意:這里的 tf.zeros([ ]),括號里填的是形狀shape;而上一節中的列表轉tensor括號里面是一維數組。
# ==1== 初始化為0的tensor
tf.zeros([]) # 只有一個數字0
# ==2== 創建一個1維的,長度為2,元素全為0的tensor
tf.zeros([2]) # 一維,長度維2,全0
# ==3== 創建m行n列全為0的tensor
tf.zeros([2,3]) # 2行3列,全0
# ==4== 創建三維tensor,全為0的tensor
tf.zeros([2,3,4])
根據輸入的tensor變量的shape來創建一個全為0的tensor
方法:?tf.zeros_like(tensor變量)
等同于:?tf.zeros(tensor變量.shape)
a = tf.zeros([2,3]) #a的shape是2行3列
# 法一:
tf.zeros_like(a) #創建一個2行3列全0的tensor
# 法二:
tf.zeros(a.shape)
2.2 創建全為1的tensor
方法:?tf.ones([shape])
# 創建只有數字1的tensor
tf.ones([])
# 創建一個1維的,長度維2,只有數字1的tensor
tf.ones(2)
# 創建一個1維的長度為2的全為1的tensor
tf.ones([2])
#創建2行3列全為1的tensor
tf.ones([2,3])
根據輸入的tensor變量的shape來創建一個全為1的tensor
方法:?tf.ones_like(tensor變量)
等同于:?tf.ones(tensor變量.shape)
# 根據返回對象的shape創建全為1的tensor
a = tf.ones([1,3]) #2維全0的tensor
tf.ones_like(a)
tf.ones_like(a.shape)
2.3 全為某元素的tensor
方法: tf.fill([shape], 元素)
用某個元素填充指定形狀
# 這個tensor標量,只有一個值1.2
tf.fill([],1.2)
# 創建1維長度為3的tensor向量,以1.2填充
tf.fill([3],1.2)
# 創建2維的2行2列的tensor矩陣,以1.2填充
tf.fill([2,2],1.2)
3. 隨機化初始
3.1 正態分布初始
方法: tf.random.normal(shape, mean=0, stddev=1, dtype=None, seed=None)
shape:?張量的形狀shape,必選
mean: 正態分布的均值,默認為0
stddev: 正態分布的標準差,默認為1.0
dtype: 輸出的類型,默認為tf.float32
seed: 隨機數種子,是一個整數1,2,當設置之后,每次生成的隨機數都一樣
# 創建一個2行2列的tensor,每個元素滿足均值為1,標準差為1的正態分布
tf.random.normal([2,2],mean=1,stddev=1)
3.2 截斷正態分布初始
方法: tf.random.truncated_normal()
在原來分布的基礎上,截去某一部分元素,限制變量x的取值范圍。后續可以優化sigmoid函數。
正態分布則可視為不進行任何截斷的截斷正態分布,也即自變量的取值為負無窮到正無窮。
# 創建一個2行2列的tensor,每個元素滿足均值為0,標準差為1的截斷正態分布
tf.random.truncated_normal([2,2],mean=0,stddev=1)
3.3 均勻分布
方法:?tf.random.uniform(shape, minval, maxval, dtype=None, seed=None)
shape:?輸出張量的形狀。
minval:?生成的隨機值范圍的下限。默認為0。
maxval:?要生成的隨機值范圍的上限。若dtype是浮點類型,默認是1。
dtype:?輸出的類型,默認 tf.float32。
seed:??整數,當設置之后,每次生成的隨機數都一樣。
tensor中每個元素的范圍在最小值和最大值之間,包含最小值,不包含最大值
# 每個元素都是[0,1)之間隨機采樣,生成2行2列的tensor
tf.random.uniform([2,2])
# 每個元素都是從1,10之間隨機采用,整型
tf.random.uniform([2,2],minval=1,maxval=10,dtype=tf.int32)
4. 重新洗牌
對一組數據隨機重新排序,可用于打散有相對關系的兩組數據
方法:?tf.random.shuffle(value,seed=None)
idx = tf.range(10) #一維tensor,包含0-9的10個數
tf.random.shuffle(idx) #對a重新洗牌
5. tf.constant() 方法
將輸入的標量、列表、矩陣變成指定數據類型的tensor
方法: tf.constant(value, dtype=None, shape=None, verify_shape=False)
value: 數值、列表、矩陣
dtype: 指定數據類型
shape: 形狀,指維數以及每一維的大小。當value是數字時,張量的所有元素都會用該數字填充。當value是一個列表時,注意列表的長度必須小于等于shape的大小(即各維大小的乘積)
verify_shape: 如果修改為True的話,表示檢查value的形狀與shape是否相符,符合就輸出結果,如果不符會報錯。
#傳入一個標量,2行2列全為1
tf.constant(1,shape=[2,2]) #傳入一個列表,指定數據類型
tf.constant([1,2.],dtype=tf.float32)
#傳入一個矩陣,判斷這個矩陣是否是2行2列
tf.constant([[1.1,2.2],[3.3,4.4]],shape=[2,2])
總結
以上是生活随笔為你收集整理的【TensorFlow2.0】(2) 创建tensor的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【TensorFlow2.0】(1) t
- 下一篇: 【TensorFlow2.0】(3) 索