国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Tensorflow輕松實現XOR運算的方式

2020-02-15 21:26:28
字體:
來源:轉載
供稿:網友

對于“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],最后之所以用約等號是因為我們的預測值與目標值之間會有一定的偏差,如果訓練的好那么這二者之間是無限接近的。

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

#!/usr/bin/env python # -*- coding:utf-8 -*- import numpy as npimport tensorflow as tf #定義輸入值與目標值X=np.array([[0,0],[0,1],[1,0],[1,1]])Y=np.array([[0],[1],[1],[0]]) #定義占位符,從輸入或目標中按行取數據x=tf.placeholder(tf.float32,[None,2])y=tf.placeholder(tf.float32,[None,1]) #初始化權重,使其滿足正態分布,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激活函數得到隱藏層的輸出值a=tf.nn.relu(tf.matmul(x,w1)+b1) #輸出層不用激活函數,直接獲得其值out=tf.matmul(a,w2)+b2 #定義損失函數MSEloss=tf.reduce_mean(tf.square(out-y)) #優化器選擇Adamtrain=tf.train.AdamOptimizer(0.01).minimize(loss) #開始訓練,迭代1001次(方便后邊的整數步數顯示)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}))            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永川市| 中超| 包头市| 临高县| 中山市| 湘西| 达日县| 大余县| 清河县| 乌什县| 丽水市| 苍梧县| 宜宾市| 淳化县| 隆林| 宝鸡市| 怀集县| 龙江县| 唐海县| 白城市| 崇信县| 云南省| 宜黄县| 盐亭县| 新绛县| 什邡市| 灌阳县| 石景山区| 渝中区| 库尔勒市| 云和县| 汪清县| 庆元县| 财经| 杭锦旗| 玛曲县| 赤峰市| 北宁市| 永平县| 太保市| 绍兴市|