從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)
(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])
(out)
#模擬四張對應的label
y = tf.range(4)
(y)#
使用one_hot對label進行編碼
y = tf.one_hot(y,depth=10)
(y)#
呼叫keras的api來計算損失(mse均方誤差)
loss =tf.keras.losses.mse(y,out)
(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語言中,可以用全域性變數,但這樣很不安全。全域性資料可以被任何人修改,而且,在乙個專案中,它很容易與其他的名字 相衝突。如果可以把乙個資料當成全域性變數那樣去儲存,但又被隱藏在類的內部,並且清楚地 與這個類相聯絡,這種處理方法當然是最理想的了。這...