在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何利用Tensorflow搭建神經網絡?

lviY_AI_shequ ? 來源:未知 ? 作者:胡薇 ? 2018-09-17 17:20 ? 次閱讀

在筆記7中,筆者和大家一起入門了 Tensorflow的基本語法,并舉了一些實際的例子進行了說明,終于告別了使用numpy手動搭建的日子。所以我們將繼續往下走,看看如何利用 Tensorflow搭建神經網絡模型。

盡管對于初學者而言使用Tensorflow看起來并不那么習慣,需要各種步驟,但簡單來說,Tensorflow搭建模型實際就是兩個過程:創建計算圖和執行計算圖。在 deeplearningai 課程中,NG和他的課程組給我們提供了Signs Dataset(手勢)數據集,其中訓練集包括1080張64x64像素的手勢圖片,并給定了 6 種標注,測試集包括120張64x64的手勢圖片,我們需要對訓練集構建神經網絡模型然后對測試集給出預測。

先來簡單看一下數據集:

# Loading the datasetX_train_orig, Y_train_orig, X_test_orig, Y_test_orig, classes = load_dataset()# Flatten the training and test imagesX_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# Normalize image vectorsX_train = X_train_flatten/255.X_test = X_test_flatten/255.# Convert training and test labels to one hot matricesY_train = convert_to_one_hot(Y_train_orig, 6) Y_test = convert_to_one_hot(Y_test_orig, 6)print ("number of training examples = " + str(X_train.shape[1]))print ("number of test examples = " + str(X_test.shape[1]))print ("X_train shape: " + str(X_train.shape))print ("Y_train shape: " + str(Y_train.shape))print ("X_test shape: " + str(X_test.shape))print ("Y_test shape: " + str(Y_test.shape))

下面就根據 NG 給定的找個數據集利用Tensorflow搭建神經網絡模型。我們選擇構建一個包含 2 個隱層的神經網絡,網絡結構大致如下:LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SOFTMAX正如我們之前利用numpy手動搭建一樣,搭建一個神經網絡的主要步驟如下:-定義網絡結構-初始化模型參數-執行前向計算/計算當前損失/執行反向傳播/權值更新

創建 placeholder

根據Tensorflow的語法,我們首先創建輸入X和輸出Y的占位符變量,這里需要注意shape參數的設置。

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

初始化模型參數

其次就是初始化神經網絡的模型參數,三層網絡包括六個參數,這里我們采用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

執行前向傳播

def forward_propagation(X, parameters): """ Implements the forward propagation for the model: 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) return Z3

計算損失函數

在Tensorflow中損失函數的計算要比手動搭建時方便很多,一行代碼即可搞定:

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

代碼整合:執行反向傳播和權值更新

跟計算損失函數類似,Tensorflow中執行反向傳播的梯度優化非常簡便,兩行代碼即可搞定,定義完整的神經網絡模型如下:

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

執行模型:

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

根據模型的訓練誤差和測試誤差可以看到:模型整體效果雖然沒有達到最佳,但基本也能達到預測效果。

總結

Tensorflow語法中兩個基本的對象類是 Tensor 和 Operator.

Tensorflow執行計算的基本步驟為

創建計算圖(張量、變量和占位符變量等)

創建會話

初始化會話

在計算圖中執行會話

可以看到的是,在 Tensorflow 中編寫神經網絡要比我們手動搭建要方便的多,這也正是深度學習框架存在的意義之一。功能強大的深度學習框架能夠幫助我們快速的搭建起復雜的神經網絡模型,在經歷了手動搭建神經網絡的思維訓練過程之后,這對于我們來說就不再困難了。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4777

    瀏覽量

    100952
  • tensorflow
    +關注

    關注

    13

    文章

    329

    瀏覽量

    60563

原文標題:深度學習筆記8:利用Tensorflow搭建神經網絡

文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    利用LABVIEW 實現bp神經網絡的程序

    誰有利用LABVIEW 實現bp神經網絡的程序啊(我用的版本是8.6的 )
    發表于 11-26 14:54

    TF之CNN:Tensorflow構建卷積神經網絡CNN的嘻嘻哈哈事之詳細攻略

    TF之CNN:Tensorflow構建卷積神經網絡CNN的嘻嘻哈哈事之詳細攻略
    發表于 12-19 17:03

    TensorFlow是什么

    更長。TensorFlow 使這一切變得更加簡單快捷,從而縮短了想法到部署之間的實現時間。在本教程中,你將學習如何利用 TensorFlow 的功能來實現深度神經網絡
    發表于 07-22 10:14

    【AI學習】第3篇--人工神經網絡

    `本篇主要介紹:人工神經網絡的起源、簡單神經網絡模型、更多神經網絡模型、機器學習的步驟:訓練與預測、訓練的兩階段:正向推演與反向傳播、以TensorFlow + Excel表達訓練流程
    發表于 11-05 17:48

    如何構建神經網絡

    原文鏈接:http://tecdat.cn/?p=5725 神經網絡是一種基于現有數據創建預測的計算系統。如何構建神經網絡神經網絡包括:輸入層:根據現有數據獲取輸入的層隱藏層:使用反向傳播優化輸入變量權重的層,以提高模型的預測
    發表于 07-12 08:02

    基于BP神經網絡的PID控制

    最近在學習電機的智能控制,上周學習了基于單神經元的PID控制,這周研究基于BP神經網絡的PID控制。神經網絡具有任意非線性表達能力,可以通過對系統性能的學習來實現具有最佳組合的PID控制。利用
    發表于 09-07 07:43

    如何使用TensorFlow神經網絡模型部署到移動或嵌入式設備上

    有很多方法可以將經過訓練的神經網絡模型部署到移動或嵌入式設備上。不同的框架在各種平臺上支持Arm,包括TensorFlow、PyTorch、Caffe2、MxNet和CNTK,如Android
    發表于 08-02 06:43

    TensorFlow寫個簡單的神經網絡

    這次就用TensorFlow寫個神經網絡,這個神經網絡寫的很簡單,就三種層,輸入層--隱藏層----輸出層;
    的頭像 發表于 03-23 15:37 ?5176次閱讀
    用<b class='flag-5'>TensorFlow</b>寫個簡單的<b class='flag-5'>神經網絡</b>

    深度學習筆記8:利用Tensorflow搭建神經網絡

    ?Tensorflow 搭建神經網絡模型。????? 盡管對于初學者而言使用 Tensorflow 看起來并不那么習慣,需要各種步驟,但簡單來說,
    的頭像 發表于 08-24 18:31 ?3347次閱讀

    如何使用numpy搭建一個卷積神經網絡詳細方法和程序概述

    內容將繼續秉承之前 DNN 的學習路線,在利用Tensorflow搭建神經網絡之前,先嘗試利用numpy手動
    的頭像 發表于 10-20 10:55 ?6091次閱讀

    如何使用Numpy搭建神經網絡

    很多同學入門機器學習之后,直接用TensorFlow調包實現神經網絡,對于神經網絡內在機理知之甚少。
    的頭像 發表于 05-18 11:02 ?3612次閱讀
    如何使用Numpy<b class='flag-5'>搭建</b><b class='flag-5'>神經網絡</b>

    基于TensorFlow框架搭建卷積神經網絡的電池片缺陷識別研究

    基于TensorFlow框架搭建卷積神經網絡對電池片電致發光圖像進行缺陷識別。選取公開的數據集,其中包含了電池片的不同種類缺陷。
    的頭像 發表于 08-28 18:46 ?7799次閱讀
    基于<b class='flag-5'>TensorFlow</b>框架<b class='flag-5'>搭建</b>卷積<b class='flag-5'>神經網絡</b>的電池片缺陷識別研究

    谷歌正式發布TensorFlow神經網絡

    日前,我們很高興發布了 TensorFlow神經網絡 (Graph Neural Networks, GNNs),此庫可以幫助開發者利用 TensorFlow 輕松處理圖結構化數據
    的頭像 發表于 01-05 13:44 ?1515次閱讀

    卷積神經網絡模型搭建

    卷積神經網絡模型搭建 卷積神經網絡模型是一種深度學習算法。它已經成為了計算機視覺和自然語言處理等各種領域的主流算法,具有很大的應用前景。本篇文章將詳細介紹卷積神經網絡模型的
    的頭像 發表于 08-21 17:11 ?983次閱讀

    使用TensorFlow進行神經網絡模型更新

    使用TensorFlow進行神經網絡模型的更新是一個涉及多個步驟的過程,包括模型定義、訓練、評估以及根據新數據或需求進行模型微調(Fine-tuning)或重新訓練。下面我將詳細闡述這個過程,并附上相應的TensorFlow代碼
    的頭像 發表于 07-12 11:51 ?450次閱讀
    主站蜘蛛池模板: 高清视频一区| 免费观看老外特级毛片| 99久热成人精品视频| 国产伦精品一区二区三区免| 电影一区二区三区| 日本黄色的视频| 亚洲色图国产精品| free性欧美video| 老色鬼久久综合第一| 手机精品在线| 在线三级播放| 在线毛片免费| 99久久免费午夜国产精品| 色一情一乱一乱91av| 越南黄色录像| 国产精品毛片久久久久久久| 免费视频你懂得| 欧美一级视频在线观看欧美 | 亚洲日本久久久午夜精品| 国产三级日本三级在线播放 | 欧美另类亚洲一区二区| 在线视频一区二区| 好紧好湿好黄的视频| 亚欧美综合| 一区二区影视| 在线三级网址| 日日噜夜夜噜| 色综合激情丁香七月色综合| 婷婷了五月色香综合缴情| 中文久草| 草草影院ccyy国产日本欧美| 午夜人成| 婷婷色站| 噜噜噜噜天天狠狠| 久久综合图片| www.色99| 毛片大全高清免费| 久久啊| 国产午夜精品福利久久| 国产传媒在线观看视频免费观看| 久在操|