Tensorflow程式設計基礎筆記之一——基礎型別及操作函式
TensorFlow程式設計基礎筆記之一——基礎型別及操作函式
1.1 張量介紹
- tensor型別(與python對比)
tensor型別 | Python型別 | 描述 |
---|---|---|
DT_FLOAT | tf.float32 | 32位浮點數 |
DT_DOUBLE | tf.float64 | 64位浮點數 |
DT_INT64 | tf.int64 | 64位有符號整型 |
DT_INT32 | tf.int32 | 32位有符號整型 |
DT_INT16 | tf.int16 | 16位有符號整型 |
DT_INT8 | tf.int8 | 8位有符號整型 |
DT_UINT8 | tf.int8 | 8位無符號整型 |
DT_STRING | tf.string | 可變長度的位元組陣列,每一個張量元素都是一個位元組陣列 |
DT_BOOL | tf.bool | 布林型 |
DT_COMPLEX64 | tf.complex64 | 由兩個32位浮點陣列成的複數:實數和虛數 |
- 張量就是多維陣列(列表),用“階”表示張量的維度
0階張量稱作標量,表示一個單獨的數;
1階張量稱作向量,表示一個一維陣列;
2階張量稱作矩陣,表示一個二維陣列,它可以有i行j列個元素,每個元素可以用行號和列號共同索引到;
判斷張量是幾階的,就通過張量右邊的方括號數,0個是0階,n個是n階;
1.2 張量的相關操作包括型別轉換、數值操作、形狀變換和資料操作
import numpy as np
import tensorflow as tf
#型別轉換函式,共6個
a=np.array(['1','2','3'])
print(a)
b=tf.string_to_number(a,out_type=tf.float32,name='ToString')
c=tf.to_double(a,name='ToDouble')
d=tf.to_float(a,name='ToFloat')
e=tf.to_int32(a,name='ToInt32')
f=tf.to_int64(a,name='ToInt64')
#將a轉換為第二個引數指定的型別
g=tf.cast(a,tf.float64,name='zhidingleixing')
print(b,c,d,e,f,g,sep='\n')
['1' '2' '3']
Tensor("ToString:0", shape=(3,), dtype=float32)
Tensor("ToDouble:0", shape=(3,), dtype=float64)
Tensor("ToFloat:0", shape=(3,), dtype=float32)
Tensor("ToInt32:0", shape=(3,), dtype=int32)
Tensor("ToInt64:0", shape=(3,), dtype=int64)
Tensor("zhidingleixing:0", shape=(3,), dtype=float64)
#數值操作相關的函式,共有13個
tensor=tf.ones([2,3],tf.int32) #按指定型別與形狀生成值為1的張量
tensor=tf.zeros([2,3],tf.int32) #按指定型別和形狀生成值為0的張量
test=[[1,2,3],[4,5,6],[7,8,9]]
tensor=tf.ones_like(test) #生成和輸出張量一樣形狀和型別的1
tensor=tf.zeros_like(test) #生成和輸出張量一樣形狀和型別的0
tensor=tf.fill([2,5],3) #為指定形狀填值
tensor=tf.constant([[1.0,2.0]]) #生成常量
tensor=tf.random_normal([2,4],mean=0,stddev=1.0,dtype=tf.float32,seed=2,name="normal") #生成正態分佈隨機數
#截斷正態分佈隨機數,均值mean,標準差stddev,只保留[mean-2*stddev,mean+2*stddev]範圍內的隨機數
tensor=tf.truncated_normal([2,4],mean=0,stddev=1.0,dtype=tf.float32,seed=2,name="normal")
#均勻分佈隨機數,範圍為[minval,maxval]
tensor=tf.random_uniform([2,4],minval=0,maxval=9,dtype=tf.int32,seed=2,name="uniform")
tf.set_random_seed(1) #設定隨機數種子
#將輸入值value按照size尺寸隨機剪輯
tensor=tf.random_crop([[1,2,3,4],[5,6,7,8],[10,11,12,13]],[2,2],name="crop")
#在[start,stop]範圍內產生num個數的等差數列。注意,start和stop要用浮點數表示,否則會報錯。
tensor=tf.linspace(start=1.0,stop=5,num=10,name=None)
#在[start,limit)範圍內以進步值delta產生等差數列。注意,不包括limit在內的。
tensor=tf.range(start=1,limit=5,delta=1)
with tf.Session() as sess:
print(sess.run(tensor))
[1 2 3 4]
#形狀變換相關函式,共6個/1
#tf.shape(input,name=None) 返回一個張量,其值為輸入引數input的shape。這個input可以是張量,也可是一個數組或list。
t=[1,2,3,4,5,6,7,8,9]
print(np.shape(t))
tshape=tf.shape(t)
tshape2=tf.shape(tshape)
with tf.Session() as sess:
print(sess.run(tshape))
print(sess.run(tshape2))
(9,)
[9]
[1]
#形狀變換相關函式,共6個/2
#tf.size(input,name=None) 返回一個張量,其內容為輸入內容的元素數量
#tf.rank(input,name=None) 返回一個張量,其內容為輸入資料input的rank。
#tf.reshape(input,shape,name=None) 將原有輸入資料的shape按照指定形狀進行變化,生成一個新的張量
t=[[[[1,1,1,1],[2,2,2,2]],[[3,3,3,3],[4,4,4,4]]]]
sizet=tf.size(t)
rankt=tf.rank(t)
tt1=tf.reshape(t,[1,16])
#如果shape有元素[-1],則表示在該維度下按照原有資料自動計算。
tt2=tf.reshape(t,[2,-1])
with tf.Session() as sess:
print(sess.run(sizet))
print(sess.run(rankt))
print(sess.run(tt1))
print(sess.run(tt2))
16
4
[[1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4]]
[[1 1 1 1 2 2 2 2]
[3 3 3 3 4 4 4 4]]
#形狀變換相關函式,共6個/5
#tf.expand_dims(input,dim,name=None) 插入維度1進入一個tensor中
t=[[2,3,3],[4,5,5]]
print(np.shape(t))
t1=tf.expand_dims(t,0)
t2=tf.expand_dims(t,1)
t3=tf.expand_dims(t,2)
#如果此處寫成t4=tf.expand_dims(t,3),則會出錯,因為只有兩個維度
t4=tf.expand_dims(t,-1)
with tf.Session() as sess:
print("在第一個位置增加一個維度",np.shape(t1))
print(sess.run(t1))
print("在第二個位置增加一個維度",np.shape(t2))
print(sess.run(t2))
print("在第三個位置增加一個維度",np.shape(t3))
print(sess.run(t3))
print("在最後一個位置增加一個維度",np.shape(t4))
print(sess.run(t4))
(2, 3)
在第一個位置增加一個維度 (1, 2, 3)
[[[2 3 3]
[4 5 5]]]
在第二個位置增加一個維度 (2, 1, 3)
[[[2 3 3]]
[[4 5 5]]]
在第三個位置增加一個維度 (2, 3, 1)
[[[2]
[3]
[3]]
[[4]
[5]
[5]]]
在最後一個位置增加一個維度 (2, 3, 1)
[[[2]
[3]
[3]]
[[4]
[5]
[5]]]
#形狀變換相關函式,共6個/6
#tf.squeeze(inpput,dim,name=None) 將dim指定的維度去掉(dim所指定的維度必須為1,如果不為1則會報錯)
t=[[[[2],[1]]]]
print(np.shape(t))
t1=tf.squeeze(t,0)
t2=tf.squeeze(t,1)
t3=tf.squeeze(t,3)
#如果寫成t4=tf.squeeze(t,2)會出錯,因為2對應的維度為2,不為1
t4=tf.squeeze(t,-1)
with tf.Session() as sess:
print("去掉第一個位置的維度",np.shape(t1))
print(sess.run(t1))
print("去掉第二個位置的維度",np.shape(t2))
print(sess.run(t2))
print("去掉第四個位置的維度",np.shape(t3))
print(sess.run(t3))
print("去掉第四個位置的維度",np.shape(t4))
print(sess.run(t4))
(1, 1, 2, 1)
去掉第一個位置的維度 (1, 2, 1)
[[[2]
[1]]]
去掉第二個位置的維度 (1, 2, 1)
[[[2]
[1]]]
去掉第四個位置的維度 (1, 1, 2)
[[[2 1]]]
去掉第四個位置的維度 (1, 1, 2)
[[[2 1]]]
#資料操作相關函式,共8個/1
#tf.slice(input,begin,size,name=None) 對輸入資料input進行切片操作,begin與size可以為List型別。
#要求begin與size的值必須一一對應,並且begin中每個值都要大於等於0且小於等於size中對應的值。
t=[[[1,1,1],[2,2,2]],[[3,3,3],[4,4,4]],[[5,5,5],[6,6,6]]]
print(np.shape(t))
slice1=tf.slice(t,[1,0,0],[1,1,3])
slice2=tf.slice(t,[1,0,0],[1,2,3])
slice3=tf.slice(t,[1,0,0],[2,1,3])
with tf.Session() as sess:
print(sess.run(slice1))
print(sess.run(slice2))
print(sess.run(slice3))
(3, 2, 3)
[[[3 3 3]]]
[[[3 3 3]
[4 4 4]]]
[[[3 3 3]]
[[5 5 5]]]
#資料操作相關函式,共8個/2
#tf.split(value,num_or_size_split,axis=0,num=None,name='split') 沿著某一維度將tensor分離為num_or_size_splits
t=tf.reshape(tf.range(start=1,limit=151,delta=1),[5,30])
#沿著第一列將t按[4,15,11]分成3個張量
split0,split1,split2=tf.split(t,[4,15,11],1)
with tf.Session() as sess:
print(t)
print(sess.run(t))
print(np.shape(split0))
print(sess.run(split0))
print(np.shape(split1))
print(sess.run(split1))
print(np.shape(split2))
print(sess.run(split2))
Tensor("Reshape_2:0", shape=(5, 30), dtype=int32)
[[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
19 20 21 22 23 24 25 26 27 28 29 30]
[ 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56 57 58 59 60]
[ 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90]
[ 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
109 110 111 112 113 114 115 116 117 118 119 120]
[121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
139 140 141 142 143 144 145 146 147 148 149 150]]
(5, 4)
[[ 1 2 3 4]
[ 31 32 33 34]
[ 61 62 63 64]
[ 91 92 93 94]
[121 122 123 124]]
(5, 15)
[[ 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
[ 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49]
[ 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79]
[ 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109]
[125 126 127 128 129 130 131 132 133 134 135 136 137 138 139]]
(5, 11)
[[ 20 21 22 23 24 25 26 27 28 29 30]
[ 50 51 52 53 54 55 56 57 58 59 60]
[ 80 81 82 83 84 85 86 87 88 89 90]
[110 111 112 113 114 115 116 117 118 119 120]
[140 141 142 143 144 145 146 147 148 149 150]]
#資料操作相關函式,共8個/3
#tf.concat(concat_dim,values,name='concat') 沿著某一維度連線tensor
t1=[[1,2,3],[4,5,6]]
t2=[[7,8,9],[10,11,12]]
print("t1:",t1)
print("t2:",t2)
with tf.Session() as sess:
print("按行連線:",sess.run(tf.concat([t1,t2],0)),sep='\n')
print("按列連線:",sess.run(tf.concat([t1,t2],1)),sep='\n')
t1: [[1, 2, 3], [4, 5, 6]]
t2: [[7, 8, 9], [10, 11, 12]]
按行連線:
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
按列連線:
[[ 1 2 3 7 8 9]
[ 4 5 6 10 11 12]]
#資料操作相關函式,共8個/4
#tf.stack(input,axis=0) 將兩個N維張量列表沿著axis軸組合成一個沿著axis軸組合成一個N+1維的張量
t1=[[1,2,3],[4,5,6]]
t2=[[10,20,30],[40,50,60]]
with tf.Session() as sess:
print("按行疊加起來:",sess.run(tf.stack([t1,t2])),sep="\n")
print("按列疊加起來:",sess.run(tf.stack([t1,t2],axis=1)),sep="\n")
按行疊加起來:
[[[ 1 2 3]
[ 4 5 6]]
[[10 20 30]
[40 50 60]]]
按列疊加起來:
[[[ 1 2 3]
[10 20 30]]
[[ 4 5 6]
[40 50 60]]]
**注意:**tf.concat()和tf.stack()的區別在於維度是否增加了
#資料操作相關函式,共8個/5
#unstack(value,num=None,axis=0,name='unstack') 將輸入value按照指定的行或列進行拆分,並輸出含有num個元素的列表(list)
#axis=0表示按行拆分,axis=1表示按列拆分,num為輸出list的個數,必須與預計輸出的個數相等,否則會報錯。可忽略這個引數
t=[[1,2,3],[4,5,6]]
with tf.Session() as sess:
print("預設按行拆分:",sess.run(tf.unstack(t)),sep="\n")
print("按列拆分:",sess.run(tf.unstack(t,axis=1)),sep="\n")
預設按行拆分:
[array([1, 2, 3]), array([4, 5, 6])]
按列拆分:
[array([1, 4]), array([2, 5]), array([3, 6])]
#資料操作相關函式,共8個/6
#tf.gather(params,indices,validate_indices=None,name=None) 合併索引indices所指示params中的切片
y=tf.constant([0.,2.,-1.])
t=tf.gather(y,[2,0])
with tf.Session() as sess:
print("提取指定索引資料之前:",sess.run(y))
print("提取指定索引資料之後,位置[2,0]:",sess.run(t))
提取指定索引資料之前: [ 0. 2. -1.]
提取指定索引資料之後,位置[2,0]: [-1. 0.]
#資料操作相關函式,共8個/7
#tf.one_hot(indices,depth,on_value=None,off_value=None,axis=None,dtype=None,name=None) 生成符合onehot編碼的張量。
indices=[0,2,-1,1] #要生成的張量,相當於指定位置設定為on_value
depth=3 #在depth長度的陣列中,哪個索引的值為onehot值
on_value=5.0 #為onehot值時,該值為多少
off_value=0.0 #非onehot值時,該值為多少
#axis為-1時生成的shape為[indices長度,depth],為0時shape為[depth,indices長度]
#還可以是1,是指在類似時間序列(三維度以上)情況下,以時間序列優先而非batch優先,即[depth,batch,indices長度]
#這裡的indices長度可以當成樣本中的feature特徵維度
axis=-1
t=tf.one_hot(indices,depth,on_value,off_value,axis)
with tf.Session() as sess:
print(sess.run(t))
[[ 5. 0. 0.]
[ 0. 0. 5.]
[ 0. 0. 0.]
[ 0. 5. 0.]]
#資料操作相關函式,共8個/8
#tf.count_nonzero(input_tensor,axis=None,keep_dims=False,dtype=dtype.int64,name=None,reduction_indices=None) 統計非0個數
t=tf.random_normal([4,4],dtype=tf.float32)
with tf.Session() as sess:
print(sess.run(t))
print("矩陣中的非0個數:",sess.run(tf.count_nonzero(t,1)))
[[-0.17469783 0.51620245 0.24235971 -0.58633131]
[ 0.76381689 0.09761845 -0.80310112 -1.80997384]
[ 0.81021774 0.5561316 -1.68870258 1.55662048]
[ 2.5749476 -0.21812376 1.47960925 0.00541722]]
矩陣中的非0個數: [4 4 4 4]
1.3 算術運算函式
x=tf.Variable
相關推薦
Tensorflow程式設計基礎筆記之一——基礎型別及操作函式
TensorFlow程式設計基礎筆記之一——基礎型別及操作函式
1.1 張量介紹
tensor型別(與python對比)
tensor型別
Python型別
描述
DT_
tensorflow程式設計入門筆記之一
基本上每一個語言或者工具都有自己的“hello world” demo,那麼學習它們一般都會從這個“hello world”開始。今天我們就來看看tensorflow的“hello world”(非官網)。在開始編寫“hello world”之前我們先看看tensorflow的程式設計模型。一. tensor
Scala 程式設計—第二節:資料型別及操作、流程控制
1.Scala 資料型別
Scala 與 Java有著相同的資料型別,下表列出了 Scala 支援的資料型別
資料型別
描述
Byte
8位有符號補碼整數。數值區間為 -128 到 1
JS基礎篇-資料型別及操作標籤樣式
一、JS的資料型別
①.數字 number 拓展:在進行+ 運算時左右兩邊任意一邊有字串,那麼它的功能是拼接。拼接後資料型別是 字串
②.字串 string
③.布林值 boolean --> true/false
④.物件 ob
【JavaScript基礎筆記】資料型別轉換、false值、記憶體圖、垃圾回收和深淺拷貝簡易概念
其他型別轉換成字串
xxx.toString() // var object = {a:1}; object.toString = [object Object] //這種方法對null undefined使用會報錯
xxx +
Python基礎筆記_Day04_資料型別、math模組、random模組、string模組
Day04_資料型別、math模組、random模組、string模組
04.01_Python語言基礎(Python中的資料型別)(瞭解)
04.02_Python語言基礎(Num資料型別)(掌握)
04.03_Python語言基礎(int型別)(掌握)
04.0
Redis零基礎筆記之一 安裝Redis(mac筆記本)
一、安裝步驟 1、去Redis官網下載軟體包,地址如下:https://redis.io/download,下載最新的版本的軟體包就可以了,最新為5.0.3 &
c++轉碼基礎(1):各種編碼型別及unicode和uft-8互轉
什麼是Ascii編碼?
單位元組編碼,適用於所有拉丁文字字母.
ASCII 碼使用指定的7 位或8 位二進位制數組合來表示128 或256 種可能的字元.
標準ASCII 碼也叫基礎ASCII碼,使用7 位二進位制數(剩下的1位二進位制為0)來表示所有的大寫和小寫字母,數字
bash程式設計讀書筆記(基礎篇I)
前言: bash不同於其他的語言。它和unix命令緊密結合。所以,精通bash的過程,就是精通unix命令的過程。
1. && 與 ;
test -e . && echo "Yes"解釋:&& 和 ";" 的區別是,如果前一個
Mooc中國大學Python學習筆記--數字型別及操作
整數型別
只需知道整數無限制,pow(),4進製表示形式
與數學中整數的概念一致 ——可正可負,沒有取值範限制 ——pow(x,y)函式:計算x^y,想算多大算多大 —十進位制:10 —二進位制,以0b或0B開頭:0b010,0B010 —八進位制,以0o或0O開頭:0o123,0O
【JavaScript基礎筆記】基礎語法易錯點(語句、表示式、變數、IF語句結構、賦值和相等)
語句和表示式的區別在於,前者主要為了進行某種操作,一般情況下不需要返回值;後者則是為了得到返回值,一定會返回一個值。凡是 JavaScript 語言中預期為值的地方,都可以使用表示式。
變數提示:JavaScript 引擎的工作方式是,先解析程式碼,獲取所有被宣告的變數,然後再一行一行地執行
Python語言程式設計-學習筆記1:簡介及目錄
最近在慕課網上報了一門課,目的是入門Python;課程內容比較緊湊,開了許久了,最近才學習;
作為一門時下火熱的程式語言,僅為興趣,學習學習!
課程簡介:
Python語言程式設計
北京理工大學
Python(3.x版本)
嵩天、黃天羽、禮欣
輔助學習網址:
課
Linux網路程式設計:socket程式設計簡介、網路位元組序及相關函式
Socket(套接字)
socket可以看成是使用者程序與核心網路協議棧的程式設計介面(API函式)。 socket不僅可以用於本機的程序間通訊,還可以用於網路上不同主機的程序間通訊。
IPv4套接字地址結構
IPv4套接字地址結構通常也稱為“網際套接字地址結構”,它以
Python語法day2-常用資料型別及操作
Python語法day2-常用資料型別及操作
數值 a,整型(int):2進位制(0b + 二進位制串),8進位制(0/0o + 八進位制串),10進位制,16進位制(0x + 16進位制串); b,浮點型(float):小數,也可以用科學計數法表示; c,複數(complex
Python之路(組合資料型別及操作)
Python之路(組合資料型別及操作)
集合型別
集合型別的定義
集合是多個元素的無序組合
集合型別與數學中的集合概念一致
集合型別之間無序,每個元素唯一,不存在相同元素
集合元素之間不可或更改,不是可變資料型別
集合用大括號 {} 表示,元素間用逗號分隔
建立集合型別用 {}
Scala入門到精通—— 第二節Scala基本型別及操作、程式控制結構
本節主要內容
Scala基本型別
基本型別操作
Scala程式控制結構
Scala基本型別
Scala中的基本資料型別如下圖:
(來源:Programming in Scala)
從上表中可以看出,Scala的基本資料型別與Java中的基本
python 入門之 – 字串型別及操作方法(十五)
在之前學基本資料型別的時候知道了,在 python 中,字串 是一個有序的字元的集合,用於儲存和表示基本的文字資訊,由一對 單引號 或 雙引號 又或者是 三引號 包含著,但是 字串 有兩個特點:
1、有序 2、不可變
其實字串有序,都很好理解,就是通過語言本身提供的方法來對字串進行一
Python資料型別及操作
Python資料型別及操作
python資料型別:number,string,list,set,dict,tuple
列表 list
索引從 0 開始
格式:list_ = [1, "a", True, None, 5]
可用for迴圈、while迴圈遍歷、len()檢視列表長度
C/C++程式設計學習筆記二:C語言的函式中,如何使用指標交換兩個數的值,深入理解指標
使用外部函式交換兩個變數的值,一個再簡單不過的事情,但是在C/C++中,正確實現該功能反應了你對指標和引用等重要知識的掌握程度。本文列舉了幾種常見的寫法,其中前三種是錯誤的,後兩種是正確的。第四種使
R語言學習筆記(概念、公式及R函式)
1、隨機實驗:可在相同2、隨機事件均值u:這個很好理解 R函式:mean中位數:對序列排序後,排在中間的數,需要特別注意的是如果序列為偶數,中位數是中間兩個數平均值. R函式:median百分位數:也是順序統計量,設百分數為p,n是樣本個數,則p位數指:np為小數,ceil