一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

電子設(shè)計(jì) ? 2018-10-16 08:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

。 代碼如下:

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

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

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

然后定義每一層的權(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)建一個(gè)只有兩個(gè)特征的輸入層, 只有一層,3個(gè)神經(jīng)元的隱藏層,以及最后的輸出層。 由于我們要做的是二分類,所以輸出層只有一個(gè)神經(jīng)元。

前向傳播算法

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

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

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

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

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

損失函數(shù)

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

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

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

反向傳播與梯度下降

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

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

GradientDescentOptimizer是梯度下降的優(yōu)化算法,參數(shù)是學(xué)習(xí)率,這里我們?cè)O(shè)置為0.01。 同時(shí)優(yōu)化目標(biāo)是最小化損失函數(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是圖計(jì)算。 我們之前做的所有的操作都不會(huì)產(chǎn)生實(shí)際的計(jì)算效果。而是在tf中維護(hù)一個(gè)默認(rèn)的圖, 當(dāng)我們顯示的使用tf的session.run的時(shí)候才會(huì)去計(jì)算整個(gè)圖中的每一個(gè)幾點(diǎn)。 上面我們聲明一個(gè)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)造兩個(gè)樣本

y_ = np.array([0,1], dtype=np.float32).reshape(2,1) # 使用np來創(chuàng)造兩個(gè)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)建一個(gè)簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)的方法.

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

    TF之CNN:Tensorflow構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)CNN的嘻嘻哈哈事之詳細(xì)攻略
    發(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)練的目的就是為每個(gè)輸出層神經(jīng)元找到合適的權(quán)向量,以達(dá)到保持拓?fù)浣Y(jié)構(gòu)的目的。SOM的訓(xùn)練過程其實(shí)很簡(jiǎn)單,就是接收到
    發(fā)表于 07-21 04:30

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

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

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

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

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

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

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

    二次開發(fā)。移植個(gè)神經(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ù)測(cè)的計(jì)算系統(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ò)。這樣就可以將這個(gè)知識(shí)作為個(gè)
    發(fā)表于 11-16 01:32 ?3651次閱讀
    <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寫個(gè)簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)

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

    如何構(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 ?2265次閱讀
    如何<b class='flag-5'>構(gòu)建</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

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

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

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

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

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

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

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

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