基於 Tensorflow 輕鬆實現 XOR 運算!| CSDN 博文精選

2021-03-02 CSDN

作者 | beyond_LH

責編 | 胡雪蕊

出品 | CSDN博客

對於「XOR」大家應該都不陌生,我們在各種課程中都會遇到,它是一個數學邏輯運算符號,在計算機中表示為「XOR」,在數學中表示為「」,學名為「異或」,其來源細節就不詳細表明了,說白了就是兩個a、b兩個值做異或運算,若a=b則結果為0,反之為1,即「相同為0,不同為1」。在計算機早期發展中,邏輯運算廣泛應用於電子管中,這一點如果大家學習過微機原理應該會比較熟悉,那麼在神經網絡中如何實現它呢,早先我們使用的是感知機,可理解為單層神經網絡,只有輸入層和輸出層(在吳恩達老師的系列教程中曾提到過這一點,關於神經網絡的層數,至今仍有異議,就是說神經網絡的層數到底包不包括輸入層,現今多數認定是不包括的,我們常說的N層神經網絡指的是隱藏層+輸出層),但是感知機是無法實現XOR運算的,簡單來說就是XOR是線性不可分的,由於感知機是有輸入輸出層,無法線性劃分XOR區域,於是後來就有了使用多層神經網絡來解決這一問題的想法~~

關於多層神經網絡實現XOR運算可大致這麼理解:

兩個輸入均有兩個取值0和1,那麼組合起來就有四種可能,即[0,0]、[0,1]、[1,0]、[1,1],這樣就可以通過中間的隱藏層進行異或運算了~咱們直接步入正題吧,對於此次試驗我們只需要一個隱藏層即可,關於神經網絡 的基礎知識建議大家去看一下吳恩達大佬的課程,真的很棒,百看不厭,真正的大佬是在認定學生是絕對小白的前提下去講解的,所以一般人都能聽懂~~接下來的圖純手工操作,可能不是那麼準確,但中心思想是沒有問題的,我們開始吧:

上圖是最基本的神經網絡示意圖,有兩個輸入x1、x2,一個隱藏層,只有一個神經元,然後有個輸出層,這就是最典型的「輸入層+隱藏層+輸出層」的架構,對於本題目,我們的輸入和輸出以及整體架構如下圖所示:

輸入量為一個矩陣,0和0異或結果為0,0和1異或結果為1,依次類推,對應我們的目標值為[0,1,1,0],最後之所以用約等號是因為我們的預測值與目標值之間會有一定的偏差,如果訓練的好那麼這二者之間是無限接近的。我們直接上全部代碼吧,就不分步進行了,以為這個實驗本身難度較低,且代碼注釋很清楚,每一步都很明確,如果大家有什麼不理解的可以留言給我,看到必回:

1
2
3
4import numpy as  np
5import tensorflow as  tf
6
7
8X=np.array([[0,0],[0,1],[1,0],[1,1]])
9Y=np.array([[0],[1],[1],[0]])
10
11
12x=tf.placeholder(tf.float32,[None,2])
13y=tf.placeholder(tf.float32,[None,1])
14
15
16w1=tf.Variable(tf.random_normal([2,2]))
17w2=tf.Variable(tf.random_normal([2,1]))
18
19
20b1=tf.Variable([0.1,0.1])
21b2=tf.Variable([0.1])
22
23
24a=tf.nn.relu(tf.matmul(x,w1)+b1)
25
26
27out=tf.matmul(a,w2)+b2
28
29
30loss=tf.reduce_mean(tf.square(out-y))
31
32
33train=tf.train.AdamOptimizer(0.01).minimize(loss)
34
35
36with tf.Session() as session:
37    session.run(tf.global_variables_initializer())  
38    for i in range(1001):
39        session.run(train,feed_dict={x:X,y:Y})  
40        loss_final=session.run(loss,feed_dict={x:X,y:Y})  
41        if i%100==0:
42            print("step:%d     loss:%2f" % (i,loss_final))
43    print("X: %r" % X)
44    print("pred_out: %r" % session.run(out,feed_dict={x:X}))

對照第三張圖片理解代碼更加直觀,我們的隱藏層神經元功能就是將輸入值和相應權重做矩陣乘法,然後加上偏移量,最後使用激活函數進行非線性轉換;而輸出層沒有用到激活函數,因為本次我們不是進行分類或者其他操作,一般情況下隱藏層使用激活函數Relu,輸出層若是分類則用sigmode,當然你也可以不用,本次實驗只是單純地做異或運算,那輸出層就不勞駕激活函數了~

這裡的x和w一般寫成矩陣形式,因為大多數都是多個輸入,而矩陣的乘積要滿足一定的條件,這一點屬於線代中最基礎的部分,大家可以稍微了解一下,這裡對設定權重的形狀還是很重要的;這是我們在學習率為0.1,迭代1001次的條件下得到的結果

沒有改進,這就說明不是迭代次數的問題,我們還是保持2001的迭代數,將學習率改為0.01,看效果:

完美~~~最後損失降為0了~~一般來說,神經網絡中的超參中最重要的就是學習率了,如果損失一直降不下來,我們首先要想到修改學習率,其他的超參次之……大家可以觀察一下我們的預測值,四項分別對應[0,1,1,0],已經是相當接近了……原文:https://blog.csdn.net/beyond9305/article/details/98209549聲明:本文為 CSDN 博客精選文章,版權歸作者所有。

☞華為方舟編譯器開源,我命由我不由天!

☞如何將 MySQL 去重操作優化到極致?| CSDN 博文精選

☞吊打 IE、Firefox,谷歌 Chrome 十年封神記

☞沃爾瑪也要發幣了,Libra忙活半天為他人做了嫁衣?

☞華為高通5G華山論劍,一文看懂5G晶片背後的明爭暗鬥

☞做實驗、修電腦、命題相親……IT 大佬教你七夕如何撩妹!

☞自然語言處理十問!獨家福利

☞七夕大禮包:26個AI學習資源送給你!

☞痛!為什麼說李彥宏無法拯救百度?

點擊閱讀原文,輸入關鍵詞,即可搜索您想要的 CSDN 文章。

相關焦點

  • TensorFlow發布JavaScript開發者的機器學習框架TensorFlow.js
    在 TensorFlow.js 中,我們可以使用最底層的 JavaScript 線性代數庫或最高級的 API 在瀏覽器上開發模型,也能基於瀏覽器運行已訓練的模型。因此,它可以充分利用瀏覽器和計算機的計算資源實現非常多機器學習應用。例如在網頁端訓練一個模型來識別圖片或語音,訓練一個模型以新穎的方式玩遊戲或構建一個能創造鋼琴音樂的神經網絡等。
  • 【技術茶話會】如何在電腦上搭建 tensorflow 環境
    TensorFlow 是一個由谷歌開發和維護的基於數據流編程的符號數學系統,被廣泛應用於各類機器學習,完成版的支持 c 和 python 語言,但機器學習模塊大多使用 python 語言編寫,下面來介紹一下如何在自己的筆記本電腦上搭建 python 語言的 tensorflow 環境。
  • 基於OpenCV與tensorflow實現實時手勢識別
    公眾號【OpenCV學堂】,致力於計算機視覺開發技術傳播,原創技術文章200+的,涉及OpenCV開發、tensorflow開發、模型解析與訓練、傳統圖像處理算法解析,對圖像與視覺感興趣的強烈推薦關注!
  • TensorFlow安裝與卷積模型
    使用pip安裝1)下載安裝Python 2)打開windows的命令行窗口,安裝CPU版本pip installtensorflow安裝GPU版本Pip install tensorflow-gpu之後驗證是否安裝了 TensorFlow 可以嘗試一下代碼>>> importtensorflow
  • 基於TensorFlow的深度學習實戰
    TensorFlow可以用於實現前述所有應用。TensorFlow很快成為GitHub上用戶最多的深度學習框架。這個庫之所以如此流行,是因為開發人員可以輕鬆的用其來搭建、測試和部署機器學習應用。上面是一個TensorFlow的示意圖。
  • TFX 最新博文:如何使用 TensorFlow 生態系統實現快速高效的 BERT...
    通過與 TensorFlow 團隊合作,並使用他們的最新成果,Concur 實驗室最終實現了一致、簡單、快速的 BERT 模型推斷,可以在幾毫秒內實現從原始文本的分類預測。那麼,各種 TensorFlow 庫和組件如何幫助研究人員達到這個裡程碑?
  • TensorFlow學習
    ,學習內容為tensorflow!使用Variable寫在前面在 Tensorflow 中,定義了某字符串是變量,它才是變量定義變量與常量state=tf.Variable(0,name='counter')print(state.name) one=tf.constant(1)變量與常量做加法運算new_value
  • 玩轉TensorFlow Lite:有道雲筆記實操案例分享
    如果只想編譯庫文件,可以編譯 "//tensorflow/contrib/lite/java:tensorflowlite" 這個 target,得到的是 libtensorflowlite_jni.so 庫和相應的 java 層接口。
  • 【強化學習實戰】基於gym和tensorflow的強化學習算法實現
    1新智元推薦【新智元導讀】知乎專欄強化學習大講堂作者郭憲博士開講《強化學習從入門到進階》,我們為您節選了其中的第二節《基於gym和tensorflow的強化學習算法實現》,希望對您有所幫助。同時,由郭憲博士等擔任授課教師的深度強化學習國慶集訓營也將於 10 月 2 日— 6 日在北京舉辦。
  • TensorFlow框架簡單介紹
    其中零階張量表示標量,也就是一個數一階張量表示向量,也就是一個一維數組N階張量可以理解為一個N維數組但是張量在TensorFlow中的實現並不是直接採用數組的形式,它只是對TensorFlow中運算結果的引用;在張量中並沒有真正保存數字,它保存的是如何得到這些數字的計算過程。
  • TensorFlow極速入門
    最後給出了在 tensorflow 中建立一個機器學習模型步驟,並用一個手寫數字識別的例子進行演示。1、tensorflow是什麼?tensorflow 是 google 開源的機器學習工具,在2015年11月其實現正式開源,開源協議Apache 2.0。
  • tensorflow極速入門
    最後給出了在 tensorflow 中建立一個機器學習模型步驟,並用一個手寫數字識別的例子進行演示。1、 tensorflow是什麼?tensorflow 是 google 開源的機器學習工具,在2015年11月其實現正式開源,開源協議Apache 2.0。下圖是 query 詞頻時序圖,從中可以看出 tensorflow 的火爆程度。
  • TensorFlow 資源大全中文版
    TensorFlow 是一個採用數據流圖(data flow graphs),用於數值計算的開源軟體庫。節點(Nodes)在圖中表示數學操作,圖中的線(edges)則表示在節點間相互聯繫的多維數據數組,即張量(tensor)。它靈活的架構讓你可以在多種平臺上展開計算,例如臺式計算機中的一個或多個CPU(或GPU)、伺服器、行動裝置等等。
  • OpenCV+Tensorflow實現實時人臉識別演示
    FaceNet網絡設計目標任務有如下1.驗證-驗證是否為同一張臉2.識別-識別是否為同一個人3.聚類-發現人臉具有相同之處的人關於什麼是神經網絡嵌入,這個解釋比較複雜,簡單的說神經網絡的嵌入學習可以幫助我們把離散變量表示為連續的向量,在低維空間找到最近鄰,tensorflow中的word2vec就是用了嵌入。
  • 令人困惑的TensorFlow!
    但讓我沒想到的是,學習曲線相當的陡峭,甚至在加入該項目幾個月後,我還偶爾對如何使用 TensorFlow 代碼來實現想法感到困惑。我把這篇博文當作瓶中信寫給過去的自己:一篇我希望在學習之初能被給予的入門介紹。我希望這篇博文也能幫助到其他人。以往的教程缺少了那些內容?
  • 【官方教程】TensorFlow在圖像識別中的應用
    Andrej Karpathy寫了一篇博文來測試他自己的表現。他的top-5 錯誤率是5.1%。這篇教程將會教你如何使用Inception-v3。你將學會如何用Python或者C++把圖像分為1000個類別。我們也會討論如何從模型中提取高層次的特徵,在今後其它視覺任務中可能會用到。
  • 手把手教你如何用TensorFlow實現基於DNN的文本分類
    至於算法和函數內部的實現機制,可以等了解整個流程之後,在實踐中進行更深入的學習和掌握。那麼問題來了,既然作為初學者不需要掌握算法細節,但實現模型的過程中又必須用到相關算法,怎麼辦呢?答案是藉助於網際網路上已經實現好的函數庫,例如 TensorFlow。在本文中,我們將利用 TensorFlow 實現一個基於深度神經網絡(DNN)的文本分類模型,希望對各位初學者有所幫助。
  • mnist tensorflow 預測專題及常見問題 - CSDN
    實現代碼如下, 1 #coding=utf-8 2 from __future__ import print_function 3 4 from tensorflow.examples.tutorials.mnist import input_data 5 mnist = input_data.read_data_sets("/
  • TensorFlow 的簡單例子 | Linux 中國
    你往其中輸入一組數據樣本用以訓練,接著給出另一組數據樣本基於訓練的數據而預測結果。這就是人工智慧了!◈ 支持 GPU 。你可以使用 GPU(圖像處理單元)替代 CPU 以更快的運算。TensorFlow 有兩個版本: CPU 版本和 GPU 版本。開始寫例子前,需要了解一些基本知識。什麼是張量?
  • TensorFlow 實現流行的機器學習算法的教程匯集
    這是使用 TensorFlow 實現流行的機器學習算法的教程匯集。本匯集的目標是讓讀者可以輕鬆通過案例深入 TensorFlow。這些案例適合那些想要清晰簡明的 TensorFlow 實現案例的初學者。本教程還包含了筆記和帶有註解的代碼。