自慰套教室~女子全员妊娠,精品无码国产自产拍在线观看蜜桃,亚洲国产精品成人精品无码区,久别的草原在线看视频免费

集團站切換校區

驗證碼已發送,請查收短信

復制成功
微信號:togogoi
添加微信好友, 詳細了解課程
已復制成功,如果自動跳轉微信失敗,請前往微信添加好友
打開微信
圖標

業界新聞

當前位置:首頁 > >業界新聞 > >

人工智能AI培訓_TensorFlow 基礎操作

發布時間: 2019-07-01 15:44:53

????人工智能AI培訓_TensorFlow 基礎操作

1.數據類型

1.1.常見的數據類型載體
  ?List:list設計非常的靈活,可以隨意的插入添加和編輯,內存的管理不是很連續。對于高維度數據的讀取和寫入效率也會很低。
  ?np.array專門用來解決同類型數據運算的一個載體,可以很方便的將圖片數據進行吞吐和轉置等計算操作。弊端:在深度學習之前就已設計和廣泛應用的科學計算庫,沒有很好的GPU計算支持,也不能支持自動求導。因此tensorflow 就應運而生。
  ?tf.Tensor: TensorFlow 和 Numpy的地位在某種層面上相似,例如一些拼接,random的操作等等。而且為了方便使用Numpy的開發者,能夠更便利的轉移到TensorFlow,在一些API的命名上也很相似。只不過功能上更加偏重于神經網絡的計算。
1.2.什么叫tensor
  ?Scalar(標量):1.1,2…,實質是指一個準確的數據類型。如果是標量1.1:維度為0。
  ?Vector(向量): [1.1], [1.1, 2.2, 3.3…]。如果是向量[1.1]:維度是1。
  ?Matrix(矩陣): [[1.1,2.2],[3.3,4.4],[5.5,6.6]]。維度通常描述為m*n。
  ?tensor(張量): 數學上用到的定義:一般是指維度大于2的都稱為tensor。在TensorFlow中習慣上將標量和一維向量也稱為tensor,因此所有的數據都可以稱為tensor。
1.3.flow

?人工智能AI培訓
很多的數據經過很多的操作從輸入到輸出完成一個flow的過程,就像水流一樣連接每一個管道完成每一個運算。
?1.4.V2.0中常用數據類型
TensorFlow中常用的數據類型有:
  ?int, float, double:
    ?tf.constant(1) : constant沿用1.0版本,可以理解成是一個普通的tensor
  ?<tf.Tensor: id=4, shape=(), dtype=int32, numpy=1>
  ?tf.constant(1.)
  ?<tf.Tensor: id=4, shape=(), dtype=float32, numpy=1.0>
    ?tf.cosntant(2.2, dtype=tf.int32),如果輸入2.2 但是指定類型為int類型,則會報錯 
    ?tf.constant(2., dtype=tf.double)
  ?<tf.Tensor: id=7, shape=(), dtype=float64, numpy=2.0>,指定雙精度類型 ,   double型實質是一個別名,對應的是 float64。
  ?bool: 布爾類型
    ?tf.constant([True, False])
  ?<tf.Tensor: id=9, shape=(2,), dtype=bool, numpy=array([True, False])
  ?string: 
    ?tf.constant(‘hello,world’)
  ?<tf.Tensor: id=14, shape(), dtpype=string, numpy=b’hello,world’>
1.5.V2.0常用的屬性(device)

  device

with tf.device(“cpu”)
  ?a=tf.constant(1)
with tf.device(“gpe”)
  ?b=tf.range(4)
#可以判斷tensor a和b分別在哪一個設備上
a.device  #返回:device:CPU:0
b.device  #返回:device:GPU:0
  ?如果需要將tensor在CPU和GPU之間相互轉移,操作如下:?
?aa=a.gpu()
aa.device #此時返回為:device:GPU:0 
bb=b.gpu()
bb.device #此時返回為:device:CPU:0 
1.6.V2.0常用的屬性(numpy,ndim)
  ?numpy:支持tensor類型直接轉換成np.array。
??b.numpy()
array([0,1,2,3],dtype=int32)
#直接指定要轉換的數據類型
int(a)    #可以直接轉換成int,但前提是,a必須是一個scalar

float(a)

  查看維度的屬性有:??

b.ndim #返回數據維度
b.shape 
tf.rank(b)
?1.7.V2.0常用的屬性(判斷tensor)?

  判斷是否是tensor?

a=tf.constant([1.])
b=tf.constant([true,False])
c=tf.constant(‘hello,world’)
d=np.arange(4)
#判斷是否是tensor
tf.is_tensor(b)   #return True
isinstance(a,tf.Tensor)  #return True
tf.is_tensor(d)   #return False
  ?查看數據類型??

a.dtype,b.dtype c.dtype
return  (tf.float32, tf.bool, tf.string)
a.dtype =tf.float32   #return True
b.dtype=tf..string     #return True
1.8.V2.0常用的屬性(數據轉換)
  ?convert
??a=np.arrange(5)   #array([0,1,2,3,4,5])
a.dtype 
dtype(‘int64’) #numpy中自動生成int64
#np.array轉換成tensor, 且需要指定數據類型為inte32
aa=tf.convert_to_tensor(a,dtype=tf.int32)
  ?cast:同樣可以實現數據轉換,且更簡潔,只需要指定dtype。??

tf.cast(aa, dtype=tf.float32) #指定轉換成float32
<tf.Tensor:id=23,shape=(5,),dtype=float32,numpy=array([0.,1.,2.,3.,4.],dtype=float32)>
aaa=tf.cast(aa, dtype=tf.double) #指定轉換成float64
<tf.Tensor:id=27,shape=(5,),dtype=float64,numpy=array([0.,1.,2.,3.,4.])>
tf.cast(aaa, dtype=tf.int32)
<tf.Tensor:id=28,shape=(5,),dtype=int32,numpy=array([0,1,2,3,4],dtype=int32)>
  ?cast:整型和布爾型之間的轉換
b=tf.constant([0,1]) #int32的整型
tf.cast(b,dtype=tf.bool)
<tf.Tensor:id=31,shape=(2,),dtype=bool,numpy=array([False, True])>
bb=tf.cast(b, dtype=tf.bool) #布爾型
tf.cast(bb, dtype=tf.int32) #布爾型轉換成整型
#False對應0,True對應1
<tf.Tensor:id=34,shape=(2,),dtype=int32,numpy=array([0, 1],dtype=int32)> 
??  Variable:可求導的屬性(專門為神經網絡的參數所設計的屬性)
a=tf.range(5)
b=tf.Variable(a) #tensor a在進行了variable的包裝之后,就具備了可求導的特性。
b.dtype  #tf.int32
b.name  #’Varibale:0’
iIsinstance(b,tf,tensor)     #False
isinstance(b,tf.Variable)   #True
tf.is_tensor(b)   #True

?2.創建Tensor

2.1.from numpy/list
  ?from numpy
?tf.convert_to_tensor(np.ones([2,3])) #可以通過dtype來設定為常用的float32或int32
<tf.Tensor:id=42,shape=(2,3),dtype=float64,numpy=array([[1.,1.,1.]],[1.,1.,1.]])>
?  from list
#list可轉換到tensor的前提是必須能轉換成np.array的數據。例如: [1, (1,2)]不支持轉換
tf.convert_to_tensor([1, 2])
<tf.Tensor:id=46,shape=(2, ),dtype=int32,numpy=array([1, 2], dtype=int32)>
#當數據類型不一致時:一個整型,一個浮點型,返回都是浮點型
tf.convert_to_tensor([1, 2.])
<tf.Tensor:id=48,shape=(2, ),dtype=float32,numpy=array([1., 2.], dtype=float32)>
?2.2.zeros/ones
  ?tf.zeros: 初始化全為0
?tf.zeros([2,2])  #這里的[2,2]是指shape為2*2,區別于convert_to_tensor
<tf.Tensor:id=10,shape=(2, 2),dtype=float32,numpy=array([[0.,0.],[0.,0.]], dtype=float32)>
tf.ones: 類似于tf.zeros,在這里是初始化全為1
tf.ones(1)
<tf.Tensor:id=27,shape=(1,),dtype=float32,numpy=array([1.], dtype=float32)>
tf.ones([])
<tf.Tensor:id=31,shape=(),dtype=float32,numpy=1.0>
tf.ones([2])
<tf.Tensor:id=31,shape=(),dtype=float32,numpy=array([[1., 1., 1.], [1., 1., 1.]],dtype=float32>
2.3.normal
  ?tf.random.normal(): 隨機初始化
???tf.random.normal([2,2],mean=1, stddev=1) #可以指定shape,均值和標準差)
<tf.Tensor:id=57,shape=(2, 2), dtype=float32, numpy=array([2.3931956, 0.33781087], [1.0709286, 1.1542176]],  dtype=float32)>
tf.ones([])
<tf.Tensor:id=31,shape=(),dtype=float32,numpy=1.0>
tf.ones([2])
<tf.Tensor:id=31,shape=(),dtype=float32,numpy=array([[1., 1., 1.], [1., 1., 1.]],dtype=float32>
2.4.Uniform/shuffle
  ?tf.random.uniform(): 隨機均勻分布初始化
#可以指定shape,最小值和較大值。此處以0-1之間的均勻分布為例。
#若不指定均值和標準差,則默認選擇均值為0,標準差為1的標準正太分布
tf.random.uniform([2,2],minval=0, maxval=1)
<tf.Tensor:id=79, shape=(2, 2), dtype=float32, numpy=array([0.1432991, 0.0267868], [0.08979011, 0.8807217]],  dtype=float32)>
  ?tf.random.shuffle(): 將數據順序打亂
idix=tf.range(10)
idx=tf.random.shuffle(idx)
<tf.Tensor:id=67, shape=(10, ), dtype=int32, numpy=array([2, 1, 9, 3, 8, 7, 0, 5, 4,6])dtype=float32)>

??3.V2.0索引和切片?

  [start:end]:
  a=tf.range(10)
  <tf.Tensor: numpy=array[0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>
  a[-1:]
  <tf.Tensor:id=48, shape=(1,), dtype=int32, numpy=array([9])>
  a[:2]
  <tf.Tensor:id=58, shape=(2,), dtype=int32, numpy=array([0, 1])>
  a[:-1]
  <tf.Tensor:id=63, shape=(2,), dtype=int32, numpy=array([0, 1, 2, 3, 4, 5, 6, 7, 8])>
  b=tf.random.normal([4, 28, 28, 3])
  b[0,: , :, :].shape   #TensorShape([28, 28, 3])
??  [start:end:stop]/[::step]
  ?b[:, 0:28:2, 0:28:2, :].shape   #TensorShape([4, 14, 14, 3])
  ?b[:, ::2, ::2, :].shape         #TensorShape([4, 14, 14, 3])


  ?[::-1],‘…’: 默認為任意長的冒號

  a=tf.random.normal([2, 4, 28, 28, 3])

  ?a[0, …].shape  #TensorShape([4, 28, 28, 3])
  ?a[…, 0].shape  #TensorShape([2, 4, 28, 28])
  ?a[1, 0, …, 0].shape  #TensorShape([28, 28])


?  tf.gather
data=tf.random.normal([4, 35, 8])
tf.gather(data, axis=0, indices=[2, 3]).shape #參數分別代表:數據源、維度、對應維度的索引號
TensorShape([2, 35, 8])
tf.gather(data, axis=0, indices=[2, 1, 3, 0]).shape  #可以理解為抽取第一個維度的索引所對應的順序為2,1,3,0
TensorShape([4, 35, 8])
?

4.V2.0維度變換

4.1.reshape
?reshape的使用方法:
a=tf.random.normal([4, 28, 28, 3])
TensorShape([4, 28, 28, 3])
a.shape, a.ndim #分別返回數據形狀和總維度數
TensorShape([4, 28, 28, 3]), 4)
#傳入的參數分別為:數據源、目標獲得view的方式。784=28*28
tf.reshape(a, [4, 784, 3]).shape  #可以理解為[batch, pixel, channel]
TesorShape([4, 784, 3]), 4)
tf.reshape(a, [4, -1, 3]).shape  #要保證4*-1*3要等于原數據大小,因此-1會自動計算出結果
TesorShape([4, 784, 3]), 4)
tf.reshape(a, [4, 784*3]).shape
TensorShape([4, 2352])


4.2.轉置
  ?tf.transpose:[w,h] →[h, w]
??a=tf.random.normal([4, 3, 2, 1])
a.shape
TesorShape([4, 3, 2, 1])
tf.transpose(a).shape
TensorShape([1, 2, 3, 4])


  ?指定轉置的維度
#指定參數perm,可以指定轉置后的維度順序
tf.transpose(a, perm=[0, 1, 3, 2]).shape  #前兩給維度保持不變,交換后兩個維度的順序
TensorShape([4, 3, 1, 2])
?

4.3.增加維度
  ?維度擴張:expand dim
  ?a: [classes, students, classes] → [4, 35, 8]: 可以描述為4個班級,每個班級有35個學生,每個學生有8門課程。
  ?增加學校的維度: [1, 4, 35, 8]+[1, 4, 35, 8] → [2, 4, 35, 8]
a=tf.random.normal([4, 35, 8])
tf.expand_dims(a, axis=0).shape #axis參數來制定要增加維度的位置
TensorShape([1, 4, 35, 8])
tf.expand_dims(a, axis=3).shape #等同于axis=-1
TensorShape([4, 35, 8, 1])
?

4.4.減少維度
  ?維度壓縮:
    ??squeeze dim
tf.squeeze(tf.zeros([1, 2, 1, 1, 3])).shape  #默認將維度唯一的維度壓縮
TensorShape([2, 3])
    ??通過axis參數來指定要壓縮的維度:
a=tf.zeros([1, 2, 1, 3])
Tf.squeeze(a, axis=0).shape 
TensorShape([2, 1, 3])


?4.5.broadcasting(廣播
  ?Broadcasting:本質是張量維度擴張的一個手段,指對某一個維度上重復n次但是確沒有真正的復制一個數據。
    ?擴張
    ?沒有復制數據
    ?通過tf.broadcast_to來實現
    ?廣播的方法:
    ?在需要的時候添加維度,且添加維度的初始size為1。
    ?擴張初始化為1的維度大小與需要進行計算的維度大小相同。
    ?例: [4, 32, 32, 3]+[3], 對[3]進行broadcasting,方法如下:[3]→[1, 1, 1, 3] →[4, 32, 32, 3]


?4.5.1.廣播的優勢
  ?為什么使用broadcasting:
    ?編輯代碼更加簡潔:
    ?[classes, students, scores] : +5 score
    ?[4, 32, 8] + [4, 32, 8],通過expand的方式需要先把維度擴張到相同size, 再進行計算。
    ?[4, 32, 8] + [5.0] (此處的5.0為數值,shape為8),廣播的方式則是在后臺自動進行擴張計算。
    ?節省內存:不需要復制數據,不占內存。
    ?[4, 32, 8] → 1024*4
    ?[8] → 8*4
?

4.5.2.廣播的實現
  ?廣播的實現:不需要輸入tf.broadcast_to的命令,而是自動判斷該操作符是否支持broadcastng, 如果支持會自動進行廣播并完成計算。
a=tf.random.normal([4, 32, 32, 3])
(a+tf.random.normal([3])).shape
TensorShape([4, 32, 32, 3])
b=tf.broadcast_to(tf.random.normal([4, 1, 1, 1]), [4, 32, 32, 3])
b.shape    #TensorShape([4, 32, 32, 3])
?

  若無法復制成相同維度大小,則無法進行廣播運算。
(a+tf.random.normal([1, 4, 1, 1])).shape #第二維度因為已經給出4,而目標數據的第二個維度為32。
InvalidArgumentError: Incompatible shapes: [4, 32, 32, 3] Vvs. [1, 4, 1, 1]
?

本實驗利用網上已有的北京房價數據集預測了北京的房價,實現了TensorFlow的線性回歸應用。

上一篇: 大數據培訓_數據挖掘中離群點檢測方法

下一篇: Java培訓_反射中的Class對象

在線咨詢 ×

您好,請問有什么可以幫您?我們將竭誠提供最優質服務!

<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>