Tensor tensorflow的資料型別

2022-06-22 23:30:16 字數 3224 閱讀 7308

從tensorflow的命名就不難看出,tensor(張量)在整個tensorflow的框架體系中都是乙個重要的概念,它可以稱為tensorflow的資料模型,因為tensor是tensorflow管理資料的形式,換句話說,在tensorflow中,所有的資料都可以借助張量的形式來表示。在張量出現之前,我們比較熟悉這樣兩種資料型別:list和np.array。list就不多說了,對於大量資料list的表現並不是很好,假設有乙個維度[64,24,24,3]的資料,它在深度學習中其實是乙個比較小的資料,但是對於list來說卻是乙個很龐大的資料,占用的記憶體空間更是無法估量。而為了解決大資料的吞吐,對於相同型別的資料載體,np.numpy有很好的表現,但是numpy是在tensorflow之前出現的乙個科學計算庫,對gpu並不支援,也不支援自動求導,為了更好的解決深度學習中的問題,tensorflow開始出現。

在數學中,乙個0維的資料(dim=0),即1.1,2.2等等被稱為乙個標量(scalar),乙個一維的資料(dim=1),即[1.1],[2.2,3.3,……]等被稱作向量(vector),乙個維度大於2的資料,如[[1,2],[3,4]]被稱為矩陣(matrix),而tensor一般是指維度大於2的向量(矩陣),但是在tensorflow中,以上所有的型別都可以被稱為tensor。

建立不同型別的資料:

#

int型

a = tf.constant(1)

#float型

b = tf.constant(1.)

#double型

c = tf.constant(2.,dtype=tf.float64)

#bool型

d =tf.constant([true,false])

#string型

e = tf.constant('

hello world

')

得到結果如下:

常用屬性如下:

#

使用numpy宣告乙個資料

a=np.arange(5)

#將其轉化為tensor

aa=tf.convert_to_tensor(a)

#強制型別轉換 int——float

bb=tf.cast(aa,dtype=tf.float32)

#.numpy()將tensor返回numpy顯示資料

print(aa.numpy())

得到

如何建立乙個tensor:

#

通過numpy建立資料轉換

a = tf.convert_to_tensor(np.ones([2,3]))

#list轉換

b = tf.convert_to_tensor([1,2])

#初始化全為0的tensor(tf.ones()用法同tf.zeros())

c = tf.zeros([2,2])

#以指定tensor的shape為基礎建立新的tensor(同tf.zeros(c.shape))

d =tf.zeros_like(c)

#填充任意元素

e = tf.fill([2,2],9)

#隨機化初始化:

#正態分佈,mean指定均值,stddev指定方差

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

#截斷正態分佈

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

#均勻分布

捎帶提一點打亂順序函式的用法:

#

隨機打散

i = tf.range(10)

i =tf.random.shuffle(i)

x = tf.random.uniform([10],maxval=10,dtype=tf.int32)

y = tf.random.uniform([10],maxval=10,dtype=tf.int32)

print

(i.numpy())

print("x:"

,x.numpy())

print("y:"

,y.numpy())

#.gather指定按照某一索引序列取值

可以看到按照同一打亂序列取值後,x和y仍然是一一對應的關係

tensor中scalar最常用的部分:loss和accuracy

損失(loss)和精度(accuracy)在前面回歸和mnist實戰都已經提過,這裡不再解釋其概念,簡單說明一下loss的求值方法

#

生成一組資料用來模擬四張的網路輸出

out = tf.random.uniform([4,10])

print

(out)

#模擬四張對應的label

y = tf.range(4)

print

(y)#

使用one_hot對label進行編碼

y = tf.one_hot(y,depth=10)

print

(y)#

呼叫keras的api來計算損失(mse均方誤差)

loss =tf.keras.losses.mse(y,out)

print

(loss)

#求loss的均值

CPoint,CSize,CRect類的資料

cpoint類 類cpoint是對windows結構point的封裝,凡是能用point結構的地方都可以用cpoint代替。結構point表示螢幕上的乙個二維點,其定義為 typedef struct tagpoint point 其中 x y分別是點的橫座標和縱座標。由於cpoint提供了一些過載...

資料訪問類的定義

從配置檔案中獲取連線字串 string connstr webconfigurationmanager.connectionstrings connectionstring connectionstring 建立連線物件 oledbconnection conn new oledbconnectio...

類的靜態資料成員

有時需要為某個類的所有物件分配乙個單一的儲存空間。在c語言中,可以用全域性變數,但這樣很不安全。全域性資料可以被任何人修改,而且,在乙個專案中,它很容易與其他的名字 相衝突。如果可以把乙個資料當成全域性變數那樣去儲存,但又被隱藏在類的內部,並且清楚地 與這個類相聯絡,這種處理方法當然是最理想的了。這...