亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Tensorflow輕松實現(xiàn)XOR運算的方式

 更新時間:2020年02月03日 17:55:23   作者:beyond_LH  
今天小編就為大家分享一篇Tensorflow輕松實現(xiàn)XOR運算的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

對于“XOR”大家應該都不陌生,我們在各種課程中都會遇到,它是一個數(shù)學邏輯運算符號,在計算機中表示為“XOR”,在數(shù)學中表示為“”,學名為“異或”,其來源細節(jié)就不詳細表明了,說白了就是兩個a、b兩個值做異或運算,若a=b則結果為0,反之為1,即“相同為0,不同為1”.

在計算機早期發(fā)展中,邏輯運算廣泛應用于電子管中,這一點如果大家學習過微機原理應該會比較熟悉,那么在神經(jīng)網(wǎng)絡中如何實現(xiàn)它呢,早先我們使用的是感知機,可理解為單層神經(jīng)網(wǎng)絡,只有輸入層和輸出層(在吳恩達老師的系列教程中曾提到過這一點,關于神經(jīng)網(wǎng)絡的層數(shù),至今仍有異議,就是說神經(jīng)網(wǎng)絡的層數(shù)到底包不包括輸入層,現(xiàn)今多數(shù)認定是不包括的,我們常說的N層神經(jīng)網(wǎng)絡指的是隱藏層+輸出層),但是感知機是無法實現(xiàn)XOR運算的,簡單來說就是XOR是線性不可分的,由于感知機是有輸入輸出層,無法線性劃分XOR區(qū)域,于是后來就有了使用多層神經(jīng)網(wǎng)絡來解決這一問題的想法~~

關于多層神經(jīng)網(wǎng)絡實現(xiàn)XOR運算可大致這么理解:

兩個輸入均有兩個取值0和1,那么組合起來就有四種可能,即[0,0]、[0,1]、[1,0]、[1,1],這樣就可以通過中間的隱藏層進行異或運算了~

咱們直接步入正題吧,對于此次試驗我們只需要一個隱藏層即可,關于神經(jīng)網(wǎng)絡 的基礎知識建議大家去看一下吳恩達大佬的課程,真的很棒,百看不厭,真正的大佬是在認定學生是絕對小白的前提下去講解的,所以一般人都能聽懂~~接下來的圖純手工操作,可能不是那么準確,但中心思想是沒有問題的,我們開始吧:

上圖是最基本的神經(jīng)網(wǎng)絡示意圖,有兩個輸入x1、x2,一個隱藏層,只有一個神經(jīng)元,然后有個輸出層,這就是最典型的“輸入層+隱藏層+輸出層”的架構,對于本題目,我們的輸入和輸出以及整體架構如下圖所示:

輸入量為一個矩陣,0和0異或結果為0,0和1異或結果為1,依次類推,對應我們的目標值為[0,1,1,0],最后之所以用約等號是因為我們的預測值與目標值之間會有一定的偏差,如果訓練的好那么這二者之間是無限接近的。

我們直接上全部代碼吧,就不分步進行了,以為這個實驗本身難度較低,且代碼注釋很清楚,每一步都很明確,如果大家有什么不理解的可以留言給我,看到必回:

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
 
import numpy as np
import tensorflow as tf
 
#定義輸入值與目標值
X=np.array([[0,0],[0,1],[1,0],[1,1]])
Y=np.array([[0],[1],[1],[0]])
 
#定義占位符,從輸入或目標中按行取數(shù)據(jù)
x=tf.placeholder(tf.float32,[None,2])
y=tf.placeholder(tf.float32,[None,1])
 
#初始化權重,使其滿足正態(tài)分布,w1和w2分別為輸入層到隱藏層和隱藏層到輸出層的權重矩陣
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)
 
#開始訓練,迭代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}) #訓練模型
    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)元功能就是將輸入值和相應權重做矩陣乘法,然后加上偏移量,最后使用激活函數(shù)進行非線性轉換;而輸出層沒有用到激活函數(shù),因為本次我們不是進行分類或者其他操作,一般情況下隱藏層使用激活函數(shù)Relu,輸出層若是分類則用sigmode,當然你也可以不用,本次實驗只是單純地做異或運算,那輸出層就不勞駕激活函數(shù)了~

對于標準神經(jīng)元內部的操作可理解為下圖:

這里的x和w一般寫成矩陣形式,因為大多數(shù)都是多個輸入,而矩陣的乘積要滿足一定的條件,這一點屬于線代中最基礎的部分,大家可以稍微了解一下,這里對設定權重的形狀還是很重要的;

看下效果吧:

這是我們在學習率為0.1,迭代1001次的條件下得到的結果

然后我們學習率不變,迭代2001次,看效果:

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

完美~~~最后損失降為0了~~一般來說,神經(jīng)網(wǎng)絡中的超參中最重要的就是學習率了,如果損失一直降不下來,我們首先要想到修改學習率,其他的超參次之……

大家可以觀察一下我們的預測值,四項分別對應[0,1,1,0],已經(jīng)是相當接近了……

以上這篇Tensorflow輕松實現(xiàn)XOR運算的方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 淺談編碼,解碼,亂碼的問題

    淺談編碼,解碼,亂碼的問題

    下面小編就為大家?guī)硪黄獪\談編碼,解碼,亂碼的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • 詳解Python當中的字符串和編碼

    詳解Python當中的字符串和編碼

    這篇文章主要介紹了詳解Python當中的字符串和編碼,代碼基于Python2.x版本,文中所述皆是Python學習中的基礎知識,需要的朋友可以參考下
    2015-04-04
  • Python基礎之函數(shù)嵌套知識總結

    Python基礎之函數(shù)嵌套知識總結

    今天帶大家回顧python基礎知識,文中對Python函數(shù)嵌套作了非常詳細的知識總結,對正在學習python基礎的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Python中用pycurl監(jiān)控http響應時間腳本分享

    Python中用pycurl監(jiān)控http響應時間腳本分享

    這篇文章主要介紹了Python中用pycurl監(jiān)控http響應時間腳本分享,本文腳本實現(xiàn)監(jiān)控http相應碼,響應大小,建立連接時間,準備傳輸時間,傳輸?shù)谝粋€字節(jié)時間,完成時間,需要的朋友可以參考下
    2015-02-02
  • python如何判斷網(wǎng)絡是否通

    python如何判斷網(wǎng)絡是否通

    這篇文章主要介紹了python如何判斷網(wǎng)絡是否通?具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python爬蟲中采集中遇到的問題整理

    python爬蟲中采集中遇到的問題整理

    在本篇文章里小編給大家整理了關于python爬蟲中采集中遇到的問題整理內容,需要的朋友們可以學習參考下。
    2020-11-11
  • 淺談python中的正則表達式(re模塊)

    淺談python中的正則表達式(re模塊)

    本篇文章主要介紹了淺談python中的正則表達式(re模塊),通過內嵌集成re模塊,程序媛們可以直接調用來實現(xiàn)正則匹配,有興趣的可以了解一下
    2017-10-10
  • Pycharm更換安裝源與添加第三方庫方法詳解

    Pycharm更換安裝源與添加第三方庫方法詳解

    在使用Pycharm的時候不免要下載許多的第三方庫,特別是移植過來的項目更是一個文件的依賴包需要下載而Pycharm默認的官方源下載比較慢,所以下面這篇文章主要給大家介紹了關于Pycharm更換安裝源與添加第三方庫的相關資料,需要的朋友可以參考下
    2023-02-02
  • python中的argparse基本用法(使用步驟)

    python中的argparse基本用法(使用步驟)

    argparse是一個python模塊,用途是:命令行選項、參數(shù)和子命令的解釋,這篇文章主要介紹了python中的argparse基本用法,需要的朋友可以參考下
    2023-04-04
  • Python中Wxpython實現(xiàn)剪切、復制、粘貼和文件打開示例

    Python中Wxpython實現(xiàn)剪切、復制、粘貼和文件打開示例

    我們在Python開發(fā)中中,可以使用WxPython庫來創(chuàng)建GUI應用程序,并實現(xiàn)剪切、復制、粘貼和文件打開功能,本文就來介紹一下,感興趣的可以了解一下
    2024-03-03

最新評論