小編給大家分享一下Tensorflow如何實(shí)現(xiàn)XOR運(yùn)算的方式,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都創(chuàng)新互聯(lián)主營龍華網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app開發(fā),龍華h5微信小程序搭建,龍華網(wǎng)站營銷推廣歡迎龍華等地區(qū)企業(yè)咨詢對于“XOR”大家應(yīng)該都不陌生,我們在各種課程中都會遇到,它是一個數(shù)學(xué)邏輯運(yùn)算符號,在計算機(jī)中表示為“XOR”,在數(shù)學(xué)中表示為“”,學(xué)名為“異或”,其來源細(xì)節(jié)就不詳細(xì)表明了,說白了就是兩個a、b兩個值做異或運(yùn)算,若a=b則結(jié)果為0,反之為1,即“相同為0,不同為1”.
在計算機(jī)早期發(fā)展中,邏輯運(yùn)算廣泛應(yīng)用于電子管中,這一點(diǎn)如果大家學(xué)習(xí)過微機(jī)原理應(yīng)該會比較熟悉,那么在神經(jīng)網(wǎng)絡(luò)中如何實(shí)現(xiàn)它呢,早先我們使用的是感知機(jī),可理解為單層神經(jīng)網(wǎng)絡(luò),只有輸入層和輸出層(在吳恩達(dá)老師的系列教程中曾提到過這一點(diǎn),關(guān)于神經(jīng)網(wǎng)絡(luò)的層數(shù),至今仍有異議,就是說神經(jīng)網(wǎng)絡(luò)的層數(shù)到底包不包括輸入層,現(xiàn)今多數(shù)認(rèn)定是不包括的,我們常說的N層神經(jīng)網(wǎng)絡(luò)指的是隱藏層+輸出層),但是感知機(jī)是無法實(shí)現(xiàn)XOR運(yùn)算的,簡單來說就是XOR是線性不可分的,由于感知機(jī)是有輸入輸出層,無法線性劃分XOR區(qū)域,于是后來就有了使用多層神經(jīng)網(wǎng)絡(luò)來解決這一問題的想法~~
關(guān)于多層神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)XOR運(yùn)算可大致這么理解:
兩個輸入均有兩個取值0和1,那么組合起來就有四種可能,即[0,0]、[0,1]、[1,0]、[1,1],這樣就可以通過中間的隱藏層進(jìn)行異或運(yùn)算了~
咱們直接步入正題吧,對于此次試驗(yàn)我們只需要一個隱藏層即可,關(guān)于神經(jīng)網(wǎng)絡(luò) 的基礎(chǔ)知識建議大家去看一下吳恩達(dá)大佬的課程,真的很棒,百看不厭,真正的大佬是在認(rèn)定學(xué)生是絕對小白的前提下去講解的,所以一般人都能聽懂~~接下來的圖純手工操作,可能不是那么準(zhǔn)確,但中心思想是沒有問題的,我們開始吧:
上圖是最基本的神經(jīng)網(wǎng)絡(luò)示意圖,有兩個輸入x1、x2,一個隱藏層,只有一個神經(jīng)元,然后有個輸出層,這就是最典型的“輸入層+隱藏層+輸出層”的架構(gòu),對于本題目,我們的輸入和輸出以及整體架構(gòu)如下圖所示:
輸入量為一個矩陣,0和0異或結(jié)果為0,0和1異或結(jié)果為1,依次類推,對應(yīng)我們的目標(biāo)值為[0,1,1,0],最后之所以用約等號是因?yàn)槲覀兊念A(yù)測值與目標(biāo)值之間會有一定的偏差,如果訓(xùn)練的好那么這二者之間是無限接近的。
我們直接上全部代碼吧,就不分步進(jìn)行了,以為這個實(shí)驗(yàn)本身難度較低,且代碼注釋很清楚,每一步都很明確,如果大家有什么不理解的可以留言給我,看到必回:
#!/usr/bin/env python # -*- coding:utf-8 -*- import numpy as np import tensorflow as tf #定義輸入值與目標(biāo)值 X=np.array([[0,0],[0,1],[1,0],[1,1]]) Y=np.array([[0],[1],[1],[0]]) #定義占位符,從輸入或目標(biāo)中按行取數(shù)據(jù) x=tf.placeholder(tf.float32,[None,2]) y=tf.placeholder(tf.float32,[None,1]) #初始化權(quán)重,使其滿足正態(tài)分布,w1和w2分別為輸入層到隱藏層和隱藏層到輸出層的權(quán)重矩陣 w1=tf.Variable(tf.random_normal([2,2])) w2=tf.Variable(tf.random_normal([2,1])) #定義b1和b2,分別為隱藏層和輸出層的偏移量 b1=tf.Variable([0.1,0.1]) b2=tf.Variable([0.1]) #使用Relu激活函數(shù)得到隱藏層的輸出值 a=tf.nn.relu(tf.matmul(x,w1)+b1) #輸出層不用激活函數(shù),直接獲得其值 out=tf.matmul(a,w2)+b2 #定義損失函數(shù)MSE loss=tf.reduce_mean(tf.square(out-y)) #優(yōu)化器選擇Adam train=tf.train.AdamOptimizer(0.01).minimize(loss) #開始訓(xùn)練,迭代1001次(方便后邊的整數(shù)步數(shù)顯示) with tf.Session() as session: session.run(tf.global_variables_initializer()) #初始化變量 for i in range(1001): session.run(train,feed_dict={x:X,y:Y}) #訓(xùn)練模型 loss_final=session.run(loss,feed_dict={x:X,y:Y}) #獲取損失 if i%100==0: print("step:%d loss:%2f" % (i,loss_final)) print("X: %r" % X) print("pred_out: %r" % session.run(out,feed_dict={x:X}))
對照第三張圖片理解代碼更加直觀,我們的隱藏層神經(jīng)元功能就是將輸入值和相應(yīng)權(quán)重做矩陣乘法,然后加上偏移量,最后使用激活函數(shù)進(jìn)行非線性轉(zhuǎn)換;而輸出層沒有用到激活函數(shù),因?yàn)楸敬挝覀儾皇沁M(jìn)行分類或者其他操作,一般情況下隱藏層使用激活函數(shù)Relu,輸出層若是分類則用sigmode,當(dāng)然你也可以不用,本次實(shí)驗(yàn)只是單純地做異或運(yùn)算,那輸出層就不勞駕激活函數(shù)了~
對于標(biāo)準(zhǔn)神經(jīng)元內(nèi)部的操作可理解為下圖:
這里的x和w一般寫成矩陣形式,因?yàn)榇蠖鄶?shù)都是多個輸入,而矩陣的乘積要滿足一定的條件,這一點(diǎn)屬于線代中最基礎(chǔ)的部分,大家可以稍微了解一下,這里對設(shè)定權(quán)重的形狀還是很重要的;
看下效果吧:
這是我們在學(xué)習(xí)率為0.1,迭代1001次的條件下得到的結(jié)果
然后我們學(xué)習(xí)率不變,迭代2001次,看效果:
沒有改進(jìn),這就說明不是迭代次數(shù)的問題,我們還是保持2001的迭代數(shù),將學(xué)習(xí)率改為0.01,看效果:
以上是“Tensorflow如何實(shí)現(xiàn)XOR運(yùn)算的方式”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
本文名稱:Tensorflow如何實(shí)現(xiàn)XOR運(yùn)算的方式-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://muchs.cn/article44/phiee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、靜態(tài)網(wǎng)站、網(wǎng)站導(dǎo)航、網(wǎng)站收錄、關(guān)鍵詞優(yōu)化、移動網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容