91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深度學(xué)習(xí)筆記8:利用Tensorflow搭建神經(jīng)網(wǎng)絡(luò)

人工智能實(shí)訓(xùn)營(yíng) ? 2018-08-24 18:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在筆記7中,和大家一起入門了 Tensorflow 的基本語(yǔ)法,并舉了一些實(shí)際的例子進(jìn)行了說(shuō)明,終于告別了使用 numpy 手動(dòng)搭建的日子。所以我們將繼續(xù)往下走,看看如何利用 Tensorflow 搭建神經(jīng)網(wǎng)絡(luò)模型。

盡管對(duì)于初學(xué)者而言使用 Tensorflow 看起來(lái)并不那么習(xí)慣,需要各種步驟,但簡(jiǎn)單來(lái)說(shuō),Tensorflow 搭建模型實(shí)際就是兩個(gè)過(guò)程:創(chuàng)建計(jì)算圖和執(zhí)行計(jì)算圖。在 deeplearningai 課程中,NG和他的課程組給我們提供了 Signs Dataset (手勢(shì))數(shù)據(jù)集,其中訓(xùn)練集包括1080張64x64像素的手勢(shì)圖片,并給定了 6 種標(biāo)注,測(cè)試集包括120張64x64的手勢(shì)圖片,我們需要對(duì)訓(xùn)練集構(gòu)建神經(jīng)網(wǎng)絡(luò)模型然后對(duì)測(cè)試集給出預(yù)測(cè)。

先來(lái)簡(jiǎn)單看一下數(shù)據(jù)集:

#LoadingthedatasetX_train_orig,Y_train_orig,X_test_orig,Y_test_orig,classes=load_dataset()#FlattenthetrainingandtestimagesX_train_flatten=X_train_orig.reshape(X_train_orig.shape[0],-1).T
X_test_flatten=X_test_orig.reshape(X_test_orig.shape[0],-1).T#NormalizeimagevectorsX_train=X_train_flatten/255.X_test=X_test_flatten/255.#ConverttrainingandtestlabelstoonehotmatricesY_train=convert_to_one_hot(Y_train_orig,6)
Y_test=convert_to_one_hot(Y_test_orig,6)print("numberoftrainingexamples="+str(X_train.shape[1]))print("numberoftestexamples="+str(X_test.shape[1]))print("X_trainshape:"+str(X_train.shape))print("Y_trainshape:"+str(Y_train.shape))print("X_testshape:"+str(X_test.shape))print("Y_testshape:"+str(Y_test.shape))

640?wx_fmt=png

下面就根據(jù) NG 給定的找個(gè)數(shù)據(jù)集利用 Tensorflow 搭建神經(jīng)網(wǎng)絡(luò)模型。我們選擇構(gòu)建一個(gè)包含 2 個(gè)隱層的神經(jīng)網(wǎng)絡(luò),網(wǎng)絡(luò)結(jié)構(gòu)大致如下:
LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SOFTMAX
正如我們之前利用
numpy 手動(dòng)搭建一樣,搭建一個(gè)神經(jīng)網(wǎng)絡(luò)的主要步驟如下:
-定義網(wǎng)絡(luò)結(jié)構(gòu)
-初始化模型參數(shù)
-執(zhí)行前向計(jì)算/計(jì)算當(dāng)前損失/執(zhí)行反向傳播/權(quán)值更新

創(chuàng)建 placeholder

根據(jù) Tensorflow 的語(yǔ)法,我們首先創(chuàng)建輸入X 和輸出 Y 的占位符變量,這里需要注意 shape 參數(shù)的設(shè)置。

def create_placeholders(n_x, n_y):
  X = tf.placeholder(tf.float32, shape=(n_x, None), name='X')
  Y = tf.placeholder(tf.float32, shape=(n_y, None), name='Y')  
return X, Y
初始化模型參數(shù)

其次就是初始化神經(jīng)網(wǎng)絡(luò)的模型參數(shù),三層網(wǎng)絡(luò)包括六個(gè)參數(shù),這里我們采用Xavier初始化方法:

def initialize_parameters(): 
  tf.set_random_seed(1)         
  W1 = tf.get_variable("W1", [25, 12288], initializer = tf.contrib.layers.xavier_initializer(seed = 1))
  b1 = tf.get_variable("b1", [25, 1], initializer = tf.zeros_initializer())
  W2 = tf.get_variable("W2", [12, 25], initializer = tf.contrib.layers.xavier_initializer(seed = 1))
  b2 = tf.get_variable("b2", [12, 1], initializer = tf.zeros_initializer())
  W3 = tf.get_variable("W3", [6, 12], initializer = tf.contrib.layers.xavier_initializer(seed = 1))
  b3 = tf.get_variable("b3", [6,1], initializer = tf.zeros_initializer())

  parameters = {"W1": W1,         
"b1": b1,
"W2": W2,
"b2": b2,
"W3": W3,
"b3": b3}
return parameters
執(zhí)行前向傳播
defforward_propagation(X,parameters):"""
Implementstheforwardpropagationforthemodel:LINEAR->RELU->LINEAR->RELU->LINEAR->SOFTMAX
"""

W1=parameters['W1']
b1=parameters['b1']
W2=parameters['W2']
b2=parameters['b2']
W3=parameters['W3']
b3=parameters['b3']

Z1=tf.add(tf.matmul(W1,X),b1)
A1=tf.nn.relu(Z1)
Z2=tf.add(tf.matmul(W2,A1),b2)
A2=tf.nn.relu(Z2)
Z3=tf.add(tf.matmul(W3,A2),b3)
returnZ3
計(jì)算損失函數(shù)

Tensorflow 中損失函數(shù)的計(jì)算要比手動(dòng)搭建時(shí)方便很多,一行代碼即可搞定:

def compute_cost(Z3, Y):
  logits = tf.transpose(Z3)
  labels = tf.transpose(Y)

  cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = logits, labels = labels))  
return cost
代碼整合:執(zhí)行反向傳播和權(quán)值更新

跟計(jì)算損失函數(shù)類似,Tensorflow 中執(zhí)行反向傳播的梯度優(yōu)化非常簡(jiǎn)便,兩行代碼即可搞定,定義完整的神經(jīng)網(wǎng)絡(luò)模型如下:

def model(X_train, Y_train, X_test, Y_test, learning_rate = 0.0001,
     num_epochs = 1500, minibatch_size = 32, print_cost = True):
  ops.reset_default_graph()          
  tf.set_random_seed(1)             
  seed = 3                     
  (n_x, m) = X_train.shape            
  n_y = Y_train.shape[0]             
  costs = []                  

  # Create Placeholders of shape (n_x, n_y)
  X, Y = create_placeholders(n_x, n_y)  # Initialize parameters
  parameters = initialize_parameters()  # Forward propagation: Build the forward propagation in the tensorflow graph

  Z3 = forward_propagation(X, parameters)  # Cost function: Add cost function to tensorflow graph
  cost = compute_cost(Z3, Y)  # Backpropagation: Define the tensorflow optimizer. Use an AdamOptimizer.
  optimizer = tf.train.GradientDescentOptimizer(learning_rate = learning_rate).minimize(cost)  # Initialize all the variables
  init = tf.global_variables_initializer()  # Start the session to compute the tensorflow graph
  with tf.Session() as sess:    # Run the initialization
    sess.run(init)    # Do the training loop
    for epoch in range(num_epochs):
      epoch_cost = 0.          
      num_minibatches = int(m / minibatch_size) 
      seed = seed + 1
      minibatches = random_mini_batches(X_train, Y_train, minibatch_size, seed)      
for minibatch in minibatches: # Select a minibatch (minibatch_X, minibatch_Y) = minibatch _ , minibatch_cost = sess.run([optimizer, cost], feed_dict={X: minibatch_X, Y: minibatch_Y}) epoch_cost += minibatch_cost / num_minibatches # Print the cost every epoch if print_cost == True and epoch % 100 == 0:
print ("Cost after epoch %i: %f" % (epoch, epoch_cost))
if print_cost == True and epoch % 5 == 0: costs.append(epoch_cost) # plot the cost plt.plot(np.squeeze(costs)) plt.ylabel('cost') plt.xlabel('iterations (per tens)') plt.title("Learning rate =" + str(learning_rate)) plt.show() # lets save the parameters in a variable parameters = sess.run(parameters)
print ("Parameters have been trained!") # Calculate the correct predictions correct_prediction = tf.equal(tf.argmax(Z3), tf.argmax(Y)) # Calculate accuracy on the test set accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
print ("Train Accuracy:", accuracy.eval({X: X_train, Y: Y_train}))
print ("Test Accuracy:", accuracy.eval({X: X_test, Y: Y_test}))
return parameters

執(zhí)行模型:

parameters=model(X_train,Y_train,X_test,Y_test)

640?wx_fmt=png

根據(jù)模型的訓(xùn)練誤差和測(cè)試誤差可以看到:模型整體效果雖然沒有達(dá)到最佳,但基本也能達(dá)到預(yù)測(cè)效果。

總結(jié)
  • Tensorflow 語(yǔ)法中兩個(gè)基本的對(duì)象類是 Tensor 和 Operator.

  • Tensorflow 執(zhí)行計(jì)算的基本步驟為

    • 創(chuàng)建計(jì)算圖(張量、變量和占位符變量等)

    • 創(chuàng)建會(huì)話

    • 初始化會(huì)話

    • 在計(jì)算圖中執(zhí)行會(huì)話

可以看到的是,在 Tensorflow 中編寫神經(jīng)網(wǎng)絡(luò)要比我們手動(dòng)搭建要方便的多,這也正是深度學(xué)習(xí)框架存在的意義之一。功能強(qiáng)大的深度學(xué)習(xí)框架能夠幫助我們快速的搭建起復(fù)雜的神經(jīng)網(wǎng)絡(luò)模型,在經(jīng)歷了手動(dòng)搭建神經(jīng)網(wǎng)絡(luò)的思維訓(xùn)練過(guò)程之后,這對(duì)于我們來(lái)說(shuō)就不再困難了。

本文由《自興動(dòng)腦人工智能》項(xiàng)目部 凱文 投稿。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    面向嵌入式部署的神經(jīng)網(wǎng)絡(luò)優(yōu)化:模型壓縮深度解析

    1.為什么需要神經(jīng)網(wǎng)絡(luò)模型壓縮? 神經(jīng)網(wǎng)絡(luò)已經(jīng)成為解決復(fù)雜機(jī)器學(xué)習(xí)問(wèn)題的強(qiáng)大工具。然而,這種能力往往伴隨著模型規(guī)模和計(jì)算復(fù)雜度的增加。當(dāng)輸入維度較大(例如長(zhǎng)時(shí)序窗口、高分辨率特征空間)時(shí),模型需要
    的頭像 發(fā)表于 02-24 15:37 ?4937次閱讀
    面向嵌入式部署的<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>優(yōu)化:模型壓縮<b class='flag-5'>深度</b>解析

    神經(jīng)網(wǎng)絡(luò)的初步認(rèn)識(shí)

    日常生活中的智能應(yīng)用都離不開深度學(xué)習(xí),而深度學(xué)習(xí)則依賴于神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)。什么是神經(jīng)網(wǎng)絡(luò)?
    的頭像 發(fā)表于 12-17 15:05 ?336次閱讀
    <b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的初步認(rèn)識(shí)

    自動(dòng)駕駛中常提的卷積神經(jīng)網(wǎng)絡(luò)是個(gè)啥?

    在自動(dòng)駕駛領(lǐng)域,經(jīng)常會(huì)聽到卷積神經(jīng)網(wǎng)絡(luò)技術(shù)。卷積神經(jīng)網(wǎng)絡(luò),簡(jiǎn)稱為CNN,是一種專門用來(lái)處理網(wǎng)格狀數(shù)據(jù)(比如圖像)的深度學(xué)習(xí)模型。CNN在圖像處理中尤其常見,因?yàn)閳D像本身就可以看作是由像
    的頭像 發(fā)表于 11-19 18:15 ?2083次閱讀
    自動(dòng)駕駛中常提的卷積<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>是個(gè)啥?

    NMSIS神經(jīng)網(wǎng)絡(luò)庫(kù)使用介紹

    :   神經(jīng)網(wǎng)絡(luò)卷積函數(shù)   神經(jīng)網(wǎng)絡(luò)激活函數(shù)   全連接層函數(shù)   神經(jīng)網(wǎng)絡(luò)池化函數(shù)   Softmax 函數(shù)   神經(jīng)網(wǎng)絡(luò)支持功能   該庫(kù)具有用于操作不同權(quán)重和激活數(shù)據(jù)類型的
    發(fā)表于 10-29 06:08

    從零開始利用NMSIS庫(kù)搭建神經(jīng)網(wǎng)絡(luò)(一)

    環(huán)境:Vivado2021.1、NucleiStudio_IDE_202102-win64 內(nèi)容:從零開始利用NMSIS庫(kù)搭建神經(jīng)網(wǎng)絡(luò),這一節(jié)主講基本的NMSIS庫(kù)卷積函數(shù)的解讀。 一、自測(cè)檢查
    發(fā)表于 10-24 13:47

    在Ubuntu20.04系統(tǒng)中訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的一些經(jīng)驗(yàn)

    本帖欲分享在Ubuntu20.04系統(tǒng)中訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的一些經(jīng)驗(yàn)。我們采用jupyter notebook作為開發(fā)IDE,以TensorFlow2為訓(xùn)練框架,目標(biāo)是訓(xùn)練一個(gè)手寫數(shù)字識(shí)別的神經(jīng)網(wǎng)絡(luò)
    發(fā)表于 10-22 07:03

    液態(tài)神經(jīng)網(wǎng)絡(luò)(LNN):時(shí)間連續(xù)性與動(dòng)態(tài)適應(yīng)性的神經(jīng)網(wǎng)絡(luò)

    1.算法簡(jiǎn)介液態(tài)神經(jīng)網(wǎng)絡(luò)(LiquidNeuralNetworks,LNN)是一種新型的神經(jīng)網(wǎng)絡(luò)架構(gòu),其設(shè)計(jì)理念借鑒自生物神經(jīng)系統(tǒng),特別是秀麗隱桿線蟲的神經(jīng)結(jié)構(gòu),盡管這種微生物的
    的頭像 發(fā)表于 09-28 10:03 ?1242次閱讀
    液態(tài)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>(LNN):時(shí)間連續(xù)性與動(dòng)態(tài)適應(yīng)性的<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    神經(jīng)網(wǎng)絡(luò)的并行計(jì)算與加速技術(shù)

    隨著人工智能技術(shù)的飛速發(fā)展,神經(jīng)網(wǎng)絡(luò)在眾多領(lǐng)域展現(xiàn)出了巨大的潛力和廣泛的應(yīng)用前景。然而,神經(jīng)網(wǎng)絡(luò)模型的復(fù)雜度和規(guī)模也在不斷增加,這使得傳統(tǒng)的串行計(jì)算方式面臨著巨大的挑戰(zhàn),如計(jì)算速度慢、訓(xùn)練時(shí)間長(zhǎng)等
    的頭像 發(fā)表于 09-17 13:31 ?1136次閱讀
    <b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的并行計(jì)算與加速技術(shù)

    如何在機(jī)器視覺中部署深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)

    圖 1:基于深度學(xué)習(xí)的目標(biāo)檢測(cè)可定位已訓(xùn)練的目標(biāo)類別,并通過(guò)矩形框(邊界框)對(duì)其進(jìn)行標(biāo)識(shí)。 在討論人工智能(AI)或深度學(xué)習(xí)時(shí),經(jīng)常會(huì)出現(xiàn)“神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 09-10 17:38 ?907次閱讀
    如何在機(jī)器視覺中部署<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    無(wú)刷電機(jī)小波神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)子位置檢測(cè)方法的研究

    摘要:論文通過(guò)對(duì)無(wú)刷電機(jī)數(shù)學(xué)模型的推導(dǎo),得出轉(zhuǎn)角:與三相相電壓之間存在映射關(guān)系,因此構(gòu)建了一個(gè)以三相相電壓為輸人,轉(zhuǎn)角為輸出的小波神經(jīng)網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)轉(zhuǎn)角預(yù)測(cè),并采用改進(jìn)遺傳算法來(lái)訓(xùn)練網(wǎng)絡(luò)結(jié)構(gòu)與參數(shù),借助
    發(fā)表于 06-25 13:06

    神經(jīng)網(wǎng)絡(luò)專家系統(tǒng)在電機(jī)故障診斷中的應(yīng)用

    摘要:針對(duì)傳統(tǒng)專家系統(tǒng)不能進(jìn)行自學(xué)習(xí)、自適應(yīng)的問(wèn)題,本文提出了基于種經(jīng)網(wǎng)絡(luò)專家系統(tǒng)的并步電機(jī)故障診斷方法。本文將小波神經(jīng)網(wǎng)絡(luò)和專家系統(tǒng)相結(jié)合,充分發(fā)揮了二者故障診斷的優(yōu)點(diǎn),很大程度上降低了對(duì)電機(jī)
    發(fā)表于 06-16 22:09

    神經(jīng)網(wǎng)絡(luò)RAS在異步電機(jī)轉(zhuǎn)速估計(jì)中的仿真研究

    眾多方法中,由于其結(jié)構(gòu)簡(jiǎn)單,穩(wěn)定性好廣泛受到人們的重視,且已被用于產(chǎn)品開發(fā)。但是MRAS仍存在在低速區(qū)速度估計(jì)精度下降和對(duì)電動(dòng)機(jī)參數(shù)變化非常敏感的問(wèn)題。本文利用神經(jīng)網(wǎng)絡(luò)的特點(diǎn),使估計(jì)更為簡(jiǎn)單、快速
    發(fā)表于 06-16 21:54

    基于FPGA搭建神經(jīng)網(wǎng)絡(luò)的步驟解析

    本文的目的是在一個(gè)神經(jīng)網(wǎng)絡(luò)已經(jīng)通過(guò)python或者M(jìn)ATLAB訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模型,將訓(xùn)練好的模型的權(quán)重和偏置文件以TXT文件格式導(dǎo)出,然后通過(guò)python程序?qū)xt文件轉(zhuǎn)化為coe文件,(coe
    的頭像 發(fā)表于 06-03 15:51 ?1236次閱讀
    基于FPGA<b class='flag-5'>搭建</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的步驟解析

    嵌入式AI技術(shù)之深度學(xué)習(xí):數(shù)據(jù)樣本預(yù)處理過(guò)程中使用合適的特征變換對(duì)深度學(xué)習(xí)的意義

    ? 作者:蘇勇Andrew 使用神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)機(jī)器學(xué)習(xí),網(wǎng)絡(luò)的每個(gè)層都將對(duì)輸入的數(shù)據(jù)做一次抽象,多層神經(jīng)網(wǎng)絡(luò)構(gòu)成深度
    的頭像 發(fā)表于 04-02 18:21 ?1523次閱讀

    用樹莓派搞深度學(xué)習(xí)?TensorFlow啟動(dòng)!

    介紹本頁(yè)面將指導(dǎo)您在搭載64位Bullseye操作系統(tǒng)的RaspberryPi4上安裝TensorFlow。TensorFlow是一個(gè)專為深度學(xué)習(xí)開發(fā)的大型軟件庫(kù),它消耗大量資源。您可
    的頭像 發(fā)表于 03-25 09:33 ?1212次閱讀
    用樹莓派搞<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>?<b class='flag-5'>TensorFlow</b>啟動(dòng)!