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

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

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

使用tensorflow構(gòu)建一個簡單神經(jīng)網(wǎng)絡(luò)

電子設(shè)計 ? 2018-10-16 08:41 ? 次閱讀

給大家分享一個案例,如何使用tensorflow 構(gòu)建一個簡單神經(jīng)網(wǎng)絡(luò)。首先我們需要創(chuàng)建我們的樣本,由于是監(jiān)督學(xué)習(xí),所以還是需要label的。為了簡單起見,我們只創(chuàng)建一個樣本進行訓(xùn)練, 可以當做是在模擬隨機梯度下降的過程

。 代碼如下:

x = tf.constant([[0.7,0.9]])

y_ = tf.constant([[1.0]])

我們使用tf中的常量來創(chuàng)建樣本和label。 這是一個有兩個特征的樣本。

然后定義每一層的權(quán)重和偏差變量

w1 = tf.Variable(tf.random_normal([2,3], stddev=1, seed=1))

w2 = tf.Variable(tf.random_normal([3,1], stddev=1, seed=1))

b1 = tf.Variable(tf.zeros([3]))

b2 = tf.Variable(tf.zeros([1]))

根據(jù)上一節(jié)講的內(nèi)容,我們使用tf的變量來生成權(quán)重和偏差。

神經(jīng)網(wǎng)絡(luò)模型

我們的神經(jīng)網(wǎng)絡(luò)模型大概如下圖:

上面我們嘗試創(chuàng)建一個只有兩個特征的輸入層, 只有一層,3個神經(jīng)元的隱藏層,以及最后的輸出層。 由于我們要做的是二分類,所以輸出層只有一個神經(jīng)元。

前向傳播算法

好了現(xiàn)在我們可以來看看前向傳播了,如果對前向傳播還不太了解的話,請復(fù)習(xí)一下深度學(xué)習(xí)的基礎(chǔ)概念~ 這里只做簡單的介紹。 首先在輸入層我們有兩個特征輸入就是x1和x2,他們都會傳遞給隱藏層的3個神經(jīng)元中進行訓(xùn)練。

每一個神經(jīng)元都是輸入層取值的加權(quán)和,就像圖出計算的一樣,分別計算出a11,a12和a13. 同樣的輸出層的計算是上一層的每一個神經(jīng)元的取值的加權(quán)和,也正如上圖計算的一樣。這就是整個的前向傳播算法,上一層的計算結(jié)果是下一層的輸入,以此類推。對數(shù)學(xué)比較熟悉的同學(xué)一定猜到了,權(quán)重(w)的計算過程就是一個矩陣乘法。 首先是由x1和x2組成1*2的矩陣, 以及隱藏層的每一個神經(jīng)元上對應(yīng)的權(quán)重(w) 組合的2*3的矩陣(2個輸入特征的w,3個神經(jīng)元),他們兩個做矩陣乘法就是這一層的前向傳播算法,結(jié)果是一個1*3的矩陣。再接著跟輸出層的3*1的矩陣(3個輸入特征的w和1個神經(jīng)元)繼續(xù)做矩陣乘法。就是最后的結(jié)果。 很幸運的是tf為我們實現(xiàn)了做矩陣乘法的函數(shù)就是matmul。 那么上面這個前向傳播的過程就是如下的代碼:

a = tf.nn.relu(tf.matmul(x,w1) + b1)

y = tf.matmul(a, w2) + b2

我們在早期的帖子中說過神經(jīng)網(wǎng)絡(luò)的每一層都有一個激活函數(shù),我們分類問題的時候都會加入激活函數(shù)來增加非線性效果。那么上面可以看到我們使用tf.nn.relu這個tf為我們實現(xiàn)好的激活函數(shù)來給我們的隱藏層前向傳播算法增加非線性。 輸出層y沒有用到激活函數(shù),我們之后會說明。

損失函數(shù)

我們需要一個損失函數(shù)來計算我們預(yù)測的結(jié)果與真實值的差距。 tf為我們實現(xiàn)了眾多的損失函數(shù)。由于這我們要做二分類問題,那么我們就需要sigmoid作為激活函數(shù),所以我們也要使用tf為sigmoid實現(xiàn)的損失函數(shù)。

cost = tf.nn.sigmoid_cross_entropy_with_logits(logits=y, labels=y_, name=None)

sigmoid_cross_entropy_with_logits的第一個參數(shù)是我們的預(yù)測值,第二個參數(shù)是真實的值,也就是我們的labels。 剛才我們計算前向傳播的時候再輸出層并沒有使用任何激活函數(shù),是因為我們tf的損失函數(shù)中會給輸出層加入相應(yīng)的激活函數(shù)。 也就是sigmoid_cross_entropy_with_logits已經(jīng)給輸出層加入了sigmoid激活函數(shù)了。

反向傳播與梯度下降

為了實現(xiàn)梯度下降算法,我們需要進行反向傳播計算來求得每一個參數(shù)對應(yīng)損失函數(shù)的導(dǎo)數(shù)。所幸的是tf同樣為我們提供了各種優(yōu)化的反向傳播算法。 這里我們使用專門的梯度下降。如下:

train_op = tf.train.GradientDescentOptimizer(0.01).minimize(cost)

GradientDescentOptimizer是梯度下降的優(yōu)化算法,參數(shù)是學(xué)習(xí)率,這里我們設(shè)置為0.01。 同時優(yōu)化目標是最小化損失函數(shù)。 所以是minimize函數(shù),并且把損失函數(shù)作為參數(shù)傳遞過去。

開始訓(xùn)練

with tf.Session() as sess:

init = tf.initialize_all_variables()

sess.run(init)

for i in range(100):

sess.run(train_op)

print(sess.run(w1))

print(sess.run(w2))

之前的帖子說過tf是圖計算。 我們之前做的所有的操作都不會產(chǎn)生實際的計算效果。而是在tf中維護一個默認的圖, 當我們顯示的使用tf的session.run的時候才會去計算整個圖中的每一個幾點。 上面我們聲明一個Session,并在一開始初始化所有的變量, 循環(huán)100次代表訓(xùn)練100輪迭代。 最后輸出訓(xùn)練處的所有的w。

完整的代碼

import tensorflow as tf

import numpy as np

x = np.arange(4, dtype=np.float32).reshape(2,2) # 使用np來創(chuàng)造兩個樣本

y_ = np.array([0,1], dtype=np.float32).reshape(2,1) # 使用np來創(chuàng)造兩個label

w1 = tf.Variable(tf.random_normal([2,3], stddev=1, seed=1))

w2 = tf.Variable(tf.random_normal([3,1], stddev=1, seed=1))

b1 = tf.Variable(tf.zeros([3]))

b2 = tf.Variable(tf.zeros([1]))

a = tf.nn.relu(tf.matmul(x,w1) + b1)

y = tf.matmul(a, w2) + b2

cost = tf.nn.sigmoid_cross_entropy_with_logits(logits=y, labels=y_, name=None)

train_op = tf.train.GradientDescentOptimizer(0.01).minimize(cost)

with tf.Session() as sess:

init = tf.initialize_all_variables()

sess.run(init)

for i in range(100):

sess.run(train_op)

print(sess.run(w1))

print(sess.run(w2))

以上就是使用tensorflow 構(gòu)建一個簡單神經(jīng)網(wǎng)絡(luò)的方法.

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

    評論

    相關(guān)推薦

    TF之CNN:Tensorflow構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)CNN的嘻嘻哈哈事之詳細攻略

    TF之CNN:Tensorflow構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)CNN的嘻嘻哈哈事之詳細攻略
    發(fā)表于 12-19 17:03

    【案例分享】ART神經(jīng)網(wǎng)絡(luò)與SOM神經(jīng)網(wǎng)絡(luò)

    元,它決定了該輸入向量在地位空間中的位置。SOM神經(jīng)網(wǎng)絡(luò)訓(xùn)練的目的就是為每個輸出層神經(jīng)元找到合適的權(quán)向量,以達到保持拓撲結(jié)構(gòu)的目的。SOM的訓(xùn)練過程其實很簡單,就是接收到
    發(fā)表于 07-21 04:30

    簡單神經(jīng)網(wǎng)絡(luò)的實現(xiàn)

    簡單神經(jīng)網(wǎng)絡(luò)
    發(fā)表于 09-11 11:57

    高階API構(gòu)建模型和數(shù)據(jù)集使用

    、前言前面結(jié)合神經(jīng)網(wǎng)絡(luò)簡要介紹TensorFlow相關(guān)概念,并給出了MNIST手寫數(shù)字識別的簡單示例,可以得出結(jié)論是,構(gòu)建
    發(fā)表于 11-04 07:49

    【AI學(xué)習(xí)】第3篇--人工神經(jīng)網(wǎng)絡(luò)

    `本篇主要介紹:人工神經(jīng)網(wǎng)絡(luò)的起源、簡單神經(jīng)網(wǎng)絡(luò)模型、更多神經(jīng)網(wǎng)絡(luò)模型、機器學(xué)習(xí)的步驟:訓(xùn)練與預(yù)測、訓(xùn)練的兩階段:正向推演與反向傳播、以Tensor
    發(fā)表于 11-05 17:48

    如何移植CNN神經(jīng)網(wǎng)絡(luò)到FPGA中?

    二次開發(fā)。移植神經(jīng)網(wǎng)絡(luò)到Lattice FPGA上可以分為三步:第步:使用Tensorflow, Caffe, Keras訓(xùn)練自己的
    發(fā)表于 11-26 07:46

    如何構(gòu)建神經(jīng)網(wǎng)絡(luò)?

    原文鏈接:http://tecdat.cn/?p=5725 神經(jīng)網(wǎng)絡(luò)種基于現(xiàn)有數(shù)據(jù)創(chuàng)建預(yù)測的計算系統(tǒng)。如何構(gòu)建神經(jīng)網(wǎng)絡(luò)神經(jīng)網(wǎng)絡(luò)包括:輸
    發(fā)表于 07-12 08:02

    步學(xué)用Tensorflow構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)

    本文主要和大家分享如何使用Tensorflow從頭開始構(gòu)建和訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)。這樣就可以將這個知識作為
    發(fā)表于 11-16 01:32 ?3514次閱讀
    <b class='flag-5'>一</b>步<b class='flag-5'>一</b>步學(xué)用<b class='flag-5'>Tensorflow</b><b class='flag-5'>構(gòu)建</b>卷積<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    TensorFlow寫個簡單神經(jīng)網(wǎng)絡(luò)

    這次就用TensorFlow寫個神經(jīng)網(wǎng)絡(luò),這個神經(jīng)網(wǎng)絡(luò)寫的很簡單,就三種層,輸入層--隱藏層----輸出層;
    的頭像 發(fā)表于 03-23 15:37 ?5191次閱讀
    用<b class='flag-5'>TensorFlow</b>寫個<b class='flag-5'>簡單</b>的<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    谷歌正式發(fā)布TensorFlow神經(jīng)網(wǎng)絡(luò)

    日前,我們很高興發(fā)布了 TensorFlow神經(jīng)網(wǎng)絡(luò) (Graph Neural Networks, GNNs),此庫可以幫助開發(fā)者利用 TensorFlow 輕松處理圖結(jié)構(gòu)化數(shù)據(jù)。
    的頭像 發(fā)表于 01-05 13:44 ?1527次閱讀

    如何構(gòu)建神經(jīng)網(wǎng)絡(luò)

    神經(jīng)網(wǎng)絡(luò)是模擬人體生物神經(jīng)元原理構(gòu)建的,比較基礎(chǔ)的有M-P模型,它按照生物 神經(jīng)元的結(jié)構(gòu)和工作原理構(gòu)造出來的
    的頭像 發(fā)表于 02-24 16:06 ?1928次閱讀
    如何<b class='flag-5'>構(gòu)建</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    使用TensorFlow進行神經(jīng)網(wǎng)絡(luò)模型更新

    使用TensorFlow進行神經(jīng)網(wǎng)絡(luò)模型的更新是涉及多個步驟的過程,包括模型定義、訓(xùn)練、評估以及根據(jù)新數(shù)據(jù)或需求進行模型微調(diào)(Fine-tuning)或重新訓(xùn)練。下面我將詳細闡述這
    的頭像 發(fā)表于 07-12 11:51 ?475次閱讀

    如何構(gòu)建多層神經(jīng)網(wǎng)絡(luò)

    構(gòu)建多層神經(jīng)網(wǎng)絡(luò)(MLP, Multi-Layer Perceptron)模型是在機器學(xué)習(xí)和深度學(xué)習(xí)領(lǐng)域廣泛使用的技術(shù),尤其在處理分類和回歸問題時。在本文中,我們將深入探討如何從頭
    的頭像 發(fā)表于 07-19 17:19 ?982次閱讀

    如何使用Python構(gòu)建LSTM神經(jīng)網(wǎng)絡(luò)模型

    構(gòu)建LSTM(長短期記憶)神經(jīng)網(wǎng)絡(luò)模型是涉及多個步驟的過程。以下是使用Python和Ke
    的頭像 發(fā)表于 11-13 10:10 ?546次閱讀

    深度學(xué)習(xí)入門:簡單神經(jīng)網(wǎng)絡(luò)構(gòu)建與實現(xiàn)

    深度學(xué)習(xí)中,神經(jīng)網(wǎng)絡(luò)是核心模型。今天我們用 Python 和 NumPy 構(gòu)建簡單神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 01-23 13:52 ?74次閱讀