從前面的學(xué)習(xí)筆記中,和大家一起使用了 numpy 一步一步從感知機(jī)開始到兩層網(wǎng)絡(luò)以及最后實(shí)現(xiàn)了深度神經(jīng)網(wǎng)絡(luò)的算法搭建。而后我們又討論了改善深度神經(jīng)網(wǎng)絡(luò)的基本方法,包括神經(jīng)網(wǎng)絡(luò)的正則化、參數(shù)優(yōu)化和調(diào)參等問(wèn)題。這一切工作我們都是基于numpy 完成的,沒(méi)有調(diào)用任何深度學(xué)習(xí)框架。在學(xué)習(xí)深度學(xué)習(xí)的時(shí)候,一開始不讓大家直接上手框架可謂良苦用心,旨在讓大家能夠跟筆者一樣,一步一步通過(guò) numpy 搭建神經(jīng)網(wǎng)絡(luò)的過(guò)程就是要讓你能夠更加深入的理解神經(jīng)網(wǎng)絡(luò)的架構(gòu)、基本原理和工作機(jī)制,而不是黑箱以視之。
但學(xué)習(xí)到這個(gè)階段,你已充分理解了神經(jīng)網(wǎng)絡(luò)的工作機(jī)制,馬上就要接觸更深層次的卷積神經(jīng)網(wǎng)絡(luò)(CNN)和遞歸神經(jīng)網(wǎng)絡(luò)(RNN),依靠純手工去搭建這些復(fù)雜的神經(jīng)網(wǎng)絡(luò)恐怕并不現(xiàn)實(shí)。這時(shí)候就該深度學(xué)習(xí)框架出場(chǎng)了。針對(duì)深度學(xué)習(xí),目前有很多優(yōu)秀的學(xué)習(xí)框架,比如說(shuō)馬上要講的 Tensorflow,微軟的 CNTK,伯克利視覺(jué)中心開發(fā)的 caffe,以及別具一格的 PyTorch 和友好易用的 keras,本系列深度學(xué)習(xí)筆記打算從 Tensorflow 開始,對(duì)三大主流易用的深度學(xué)習(xí)框架 Tensorflow、PyTorch 和 keras 進(jìn)行學(xué)習(xí)和講解。選擇這三個(gè)框架的原因在于其簡(jiǎn)單易用、方便編程和運(yùn)行速度相對(duì)較快。
作為谷歌的深度學(xué)習(xí)框架, Tensorflow 在深度學(xué)習(xí)領(lǐng)域可謂風(fēng)頭無(wú)二。其中 Tensor 可以理解為類似于 numpy 的 N 維數(shù)組,名為張量; flow 則意味著 N 維數(shù)組的流計(jì)算,而 Tensor 的數(shù)據(jù)流計(jì)算形式則為一個(gè)計(jì)算圖的形式進(jìn)行計(jì)算。這里重點(diǎn)提一下,如果大學(xué)本科期間的線性代數(shù)忘記了的話,我勸你趕緊回去翻一翻,線性代數(shù)和矩陣論是深度學(xué)習(xí)的基礎(chǔ),希望你能熟練掌握。
先看個(gè)簡(jiǎn)單的例子。
importtensorflowastf#Definey_hatconstant.Setto36.y_hat=tf.constant(36,name='y_hat')#Definey.Setto39y=tf.constant(39,name='y')#Createavariableforthelossloss=tf.Variable((y-y_hat)**2,name='loss')#Wheninitisrunlater(session.run(init)),thelossvariablewillbeinitializedandreadytobecomputedinit=tf.global_variables_initializer()#Createasessionandprinttheoutputwithtf.Session()assession: #Initializesthevariables session.run(init) #Printstheloss print(session.run(loss))9
在上述代碼中,我們首先定義了兩個(gè)常量,然后定義了一個(gè) loss Tensor(變量),之后對(duì)變量進(jìn)行初始化,創(chuàng)建計(jì)算會(huì)話,最后執(zhí)行會(huì)話計(jì)算并打印結(jié)果。所以我們可以看到運(yùn)行 Tensorflow的基本機(jī)制:
創(chuàng)建一些尚未被執(zhí)行的張量——定義這些張量之間的運(yùn)算操作——初始化這些張量——?jiǎng)?chuàng)建會(huì)話——執(zhí)行會(huì)話
需要注意的一點(diǎn)是,創(chuàng)建會(huì)話后一定要執(zhí)行這個(gè)會(huì)話,且看下面示例:
a=tf.constant(2) b=tf.constant(10) c=tf.multiply(a,b) print(c) Tensor("Mul:0",shape=(),dtype=int32)在上面的示例中,我們創(chuàng)建了兩個(gè) Tensor和 Tensor之間的乘積運(yùn)算,但直接打印的結(jié)果卻不是我們想要看到的 20. 原因則在于這里我們沒(méi)有創(chuàng)建會(huì)話并執(zhí)行,只是打印了兩個(gè)張量運(yùn)算之后的張量。創(chuàng)建會(huì)話并執(zhí)行操作如下:
sess=tf.Session() print(sess.run(c))20
除了直接定義變量之外,我們還可以通過(guò)創(chuàng)建占位符變量來(lái)稍后為之賦值,然后在運(yùn)行會(huì)話中傳入一個(gè) feed_dict,示例如下:
x=tf.placeholder(tf.int64,name='x') print(sess.run(2*x,feed_dict={x:3})) sess.close()6
相信你已經(jīng)大致明白了基于張量運(yùn)算的 Tensorflow的底層運(yùn)行機(jī)制了。總結(jié)而言就是:創(chuàng)建張量、初始化張量、創(chuàng)建會(huì)話并執(zhí)行。
下面展示幾個(gè) Tensorflow的神經(jīng)網(wǎng)絡(luò)計(jì)算的基礎(chǔ)函數(shù)示例。
線性函數(shù)
def linear_function(): """ Implements a linear function: Initializes W to be a random tensor of shape (4,3) Initializes X to be a random tensor of shape (3,1) Initializes b to be a random tensor of shape (4,1) Returns: result -- runs the session for Y = WX + b """ np.random.seed(1) X = tf.constant(np.random.randn(3,1), name='X') W = tf.constant(np.random.randn(4,3), name='W') b = tf.constant(np.random.randn(4,1), name='b') Y = tf.add(tf.matmul(W, X), b) # Create the session using tf.Session() and run it with sess.run(...) on the variable you want to calculate init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) result = sess.run(Y) # close the session sess.close() return result計(jì)算sigmoid函數(shù)
def sigmoid(z): """ Computes the sigmoid of z Arguments: z -- input value, scalar or vector Returns: results -- the sigmoid of z """ x = tf.placeholder(tf.float32, name='x') sigmoid = tf.sigmoid(x) with tf.Session() as sess: result = sess.run(sigmoid, feed_dict={x: z}) return result計(jì)算損失函數(shù)
one hot 編碼
參數(shù)初始化
def ones(shape): """ Creates an array of ones of dimension shape Arguments: shape -- shape of the array you want to create Returns: ones -- array containing only ones """ # Create "ones" tensor using tf.ones(...). (approx. 1 line) ones = tf.ones(shape) # Create the session (approx. 1 line) sess = tf.Session() # Run the session to compute 'ones' (approx. 1 line) ones = sess.run(ones) # Close the session (approx. 1 line). See method 1 above. sess.close() return ones一頓操作之后,我們已經(jīng)將神經(jīng)網(wǎng)絡(luò)的一些基礎(chǔ)運(yùn)算利用 Tensorflow 定義好了。在下一期筆記中,我們將學(xué)習(xí)如何使用 Tensorflow 搭建神經(jīng)網(wǎng)絡(luò)。
本文來(lái)自《自興動(dòng)腦人工智能》項(xiàng)目部:凱文
-
人工智能
+關(guān)注
關(guān)注
1817文章
50094瀏覽量
265271 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8553瀏覽量
136928 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5598瀏覽量
124393
發(fā)布評(píng)論請(qǐng)先 登錄
機(jī)器學(xué)習(xí)和深度學(xué)習(xí)中需避免的 7 個(gè)常見錯(cuò)誤與局限性
穿孔機(jī)頂頭檢測(cè)儀 機(jī)器視覺(jué)深度學(xué)習(xí)
【團(tuán)購(gòu)】獨(dú)家全套珍藏!龍哥LabVIEW視覺(jué)深度學(xué)習(xí)實(shí)戰(zhàn)課(11大系列課程,共5000+分鐘)
【團(tuán)購(gòu)】獨(dú)家全套珍藏!龍哥LabVIEW視覺(jué)深度學(xué)習(xí)實(shí)戰(zhàn)課程(11大系列課程,共5000+分鐘)
如何深度學(xué)習(xí)機(jī)器視覺(jué)的應(yīng)用場(chǎng)景
學(xué)習(xí)物聯(lián)網(wǎng)怎么入門?
如何在機(jī)器視覺(jué)中部署深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)
深度學(xué)習(xí)對(duì)工業(yè)物聯(lián)網(wǎng)有哪些幫助
自動(dòng)駕駛中Transformer大模型會(huì)取代深度學(xué)習(xí)嗎?
嵌入式AI技術(shù)之深度學(xué)習(xí):數(shù)據(jù)樣本預(yù)處理過(guò)程中使用合適的特征變換對(duì)深度學(xué)習(xí)的意義
用樹莓派搞深度學(xué)習(xí)?TensorFlow啟動(dòng)!
【連載】深度學(xué)習(xí)筆記7:Tensorflow入門
評(píng)論