1. 程式人生 > >TensorFlow程式碼實現(二)[實現異或門(XOR)]

TensorFlow程式碼實現(二)[實現異或門(XOR)]

第一個實驗:用神經網路實現異或門
測試資料如下:
[0,0]->[0]
[1,0]->[1]
[1,1]->[0]
[0,1]->[1]
資料量很小,但異或門遠沒有我想象的好寫,原來在第一層的時候我使用的啟用函式是relu,第一層有兩個神經元;輸出層使用的啟用函式是softmax;學習率是0.01;loss function選的是梯度下降演算法,weights和biases都是隨機產生的非零資料。
後來發現這樣訓練出來的神經網路的預測值是[0.5,0.5,0.5,0.5]。
最後參考了別人的程式,改成了如下配置**第一層有16個神經元(其實影響不大),第一層使用的啟用函式是relu;輸出層使用的啟用函式是sigmoid;loss function選的是adam,這樣修改之後就開始像準確值逼近了!
看來深度學習會設計才是最重要的。
下面附上程式碼:

import tensorflow as tf
learning_rate = 0.01
x_data = [[0.,0.],[1.,0.],[1.,1.],[0.,1.]]
x = tf.placeholder("float", shape = [None,2])
y_data = [0,1,0,1]
y = tf.placeholder("float",shape=[None,1])
weights = {
    'w1':tf.Variable(tf.random_normal([2,16])),
    'w2':tf.Variable(tf.random_normal([16,1]))
}
biases = {
    'b1'
:tf.Variable(tf.random_normal([1])), 'b2':tf.Variable(tf.random_normal([1])) } def dnn(_X,_weights,_biases): d1 = tf.matmul(_X, _weights['w1'])+_biases['b1'] d1 = tf.nn.relu(d1) d2 = tf.matmul(d1,_weights['w2'])+_biases['b2'] d2 = tf.nn.sigmoid(d2) return d2 pred = dnn(x, weights, biases) cost = tf.reduce_mean(tf.square(y-pred)) optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(cost) correct_pred = tf.equal(tf.argmax(pred,1
),tf.argmax(y,1)) accuracy = tf.reduce_mean(tf.cast(correct_pred,tf.float32)) init = tf.initialize_all_variables() with tf.Session() as sess: sess.run(init) step = 1 for _ in range(1500): batch_xs = tf.reshape(x_data,shape=[-1,2]) batch_ys = tf.reshape(y_data,shape=[-1,1]) #print(batch_xs) #print(batch_ys) sess.run(optimizer,feed_dict={x:sess.run(batch_xs),y:sess.run(batch_ys)}) acc = sess.run(accuracy,feed_dict={x:sess.run(batch_xs),y:sess.run(batch_ys)}) loss = sess.run(cost,feed_dict = {x:sess.run(batch_xs),y:sess.run(batch_ys)}) #print("Step "+str(step)+",Minibatch Loss = "+"{:.6f}".format(loss)+", Training Accuracy = "+"{:.5f}".format(acc)) step += 1 if(step%100==0): print("Step "+str(step)+" loss "+"{:.6f}".format(loss)) print(sess.run(pred,feed_dict={x:sess.run(batch_xs)})) # print(sess.run(weights)) # print(sess.run(biases)) print("Optimization Finished!")

相關推薦

TensorFlow程式碼實現[實現XOR]

第一個實驗:用神經網路實現異或門 測試資料如下: [0,0]->[0] [1,0]->[1] [1,1]->[0] [0,1]->[1] 資料量很小,但異或門遠沒有我想象的好寫,原來在第一層的時候我使用的啟用函式是relu,第

【LeetCode-面試算法經典-Java實現】【107-Binary Tree Level Order Traversal II叉樹層序遍歷II

lin -m length ret itl pub util 實現類 markdown 【107-Binary Tree Level Order Traversal II(二叉樹層序遍歷II)】 【LeetCode-面試算法經典-Java實現】【全

深度學習入門筆記————線性神經網路解決問題程式碼

首先梳理一下思路 輸入為1,0。00異或為0,01異或為1,10異或為1,11異或為0.所以輸出為2類如下圖可知,需要兩條線劃分。 Madaline用間接地辦法解決。多個線性函式進行劃分,然後對各個神經元的輸出做邏輯運算。如圖,用兩條直線實現了異或的劃分。   線

從零開始打造一個新聞訂閱APP之爬蟲篇實現一個簡單的爬蟲系統

前景提要:如何開發一個新聞訂閱APP之爬蟲篇(一、背景介紹&需求分析) 做一個特定的爬蟲系統,首先考慮它要做什麼? 從網際網路上抓取指定的N個站點資訊,解析提取需要的內容,按照特定的結構儲存; 系統結構圖如下: 下面是主要的程式碼結構;

Java的位運算符詳解實例——與&、非~|^僅作記錄

out 位運算符 異或運算 pri stat 運算 data 操作 amp 位運算符主要針對二進制,它包括了:“與”、“非”、“或”、“異或”。從表面上看似乎有點像邏輯運算符,但邏輯運算符是針對兩個關系運算符來進行邏輯運算,而位運算符主要針對兩個二進制數的位進行邏輯運算。下

Java的位運算符—與&、非~|^

ati 得出 rdquo 根據 有一個 關系 public 操作數 針對 位運算符主要針對二進制,它包括了:“與”、“非”、“或”、“異或”。從表面上看似乎有點像邏輯運算符,但邏

紫色的手鏈求最大值和次大值的值最大

tdi 一個 data 不同的 col std 不同 date 格式 描述 那是木姑娘十七歲時,我送給她的生日禮物。(後來手鏈也成為了我最喜歡的出題媒介) 記得最初買的手鏈,由n段紫色的珠子構成,每一顆珠子都被賦予了一種價值評價w[i]。 為了木姑娘,我只惋惜自己不能摘下漫

java運算符 與&、非~|^

log 都是 如果 原碼 IT parse ava 十進制 就是 1.位異或運算(^) 運算規則是:兩個數轉為二進制,然後從高位開始比較,如果相同則為0,不相同則為1。 比如:8^11. 8轉為二進制是1000,11轉為二進制是1011.從高位開始比較得到的是:0011

【BZOJ5301】【CQOI2018】序列莫隊

script oid -i 莫隊 void for per printf main 【BZOJ5301】【CQOI2018】異或序列(莫隊) 題面 BZOJ 洛谷 Description 已知一個長度為 n 的整數數列 a[1],a[2],…,a[n] ,給定查詢參數 l、

UVA818-Cutting Chains進制枚舉+dfs判環

wing 情況 jewel dep join man follow tin pair Problem UVA818-Cutting Chains Accept:393 Submit:2087 Time Limit: 3000 mSec Problem Descript

2018.10.26 洛谷P4551 最長路徑01trie

傳送門 直接把每個點到根節點的異或距離插入01trie。 然後列舉每個點在01trie上匹配來更新答案就行了。 程式碼: #include<iostream> #include<cstdio> #include<cstring> #include&

權值樹狀陣列

異或和(權值樹狀陣列) 題目描述 在加里敦中學的小明最近愛上了數學競賽,很多數學競賽的題都是與序列的連續和相關的。所以對於一個序列,求出它們所有的連續和來說,小明覺得十分的簡單。但今天小明遇到了一個序列和的難題,這個題目不僅要求你快速的求出所有的連續和,還要快速的求出這些連續和的異或值。小明很快的就求出了

java二進位制數原碼補碼反碼,運算子 與&、非~|^及位運算總結

    看過博主另一篇文章--Java集合--HashMap,對裡面使用的運算子及位運算不是很清楚的童鞋可以看下這篇文章,對理解hashMao原始碼很有幫助,自己也可以在程式中寫寫,逼格絕對滿分!!!      大家都知道一個位元組是8個二進位制

一個線上音樂軟體的故事、其實故事從這裡才開始

其實故事從這裡才開始 如果你看到了這裡,那你應該看出來,我是在講軟體開發的故事,如果你和我一樣喜歡Linux,喜歡用Python那我希望你也喜歡這個故事。這個故事並不是講如何使用Python的,所以關於如何使用Python推薦你看《Python cookbook 第三版》

BZOJ5301: [Cqoi2018]序列莫隊

5301: [Cqoi2018]異或序列 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 400  Solved: 291[Submit][Status][Discuss]

linux指令、目錄與文件常用指令

1.對目錄的相關操作 在所有目錄底下都會存在的兩個目錄,分別是『.』與『..』 分別代表此層與上層目錄的意思。 . 代表此層目錄 .. 代表上一層目錄 - 代表前一個工作目錄 ~ 代表『目前使用者身份』所在的家目錄 ~account 代表account 這個使用者的家目錄(acco

bzoj 4888和的

文章目錄 題目連結: 思路: 怎麼快速知道有多少個sum[l-1]滿足sum[r]-sum[l-1]的第k位是1 (一)分類討論 (二)用不等式 題目連結: https://

BZOJ4888 Tjoi2017樹狀陣列

  化為字首和相減。考慮每一位的貢獻。則需要快速查詢之前有幾個數和當前數的差在第k位上為1。顯然其與更高位是無關的。於是用BIT維護後k位的數的出現次數,瞎算一算即可。 // luogu-judger-enable-o2 #include<iostream> #include<cs

BZOJ4888 Tjoi2017樹狀數組

ons ont \n name include bit online ger ++   化為前綴和相減。考慮每一位的貢獻。則需要快速查詢之前有幾個數和當前數的差在第k位上為1。顯然其與更高位是無關的。於是用BIT維護後k位的數的出現次數,瞎算一算即可。 // luogu-

java中 & ^ ~ 的運算 java運算子 與&、非~|^

java運算子 與(&)、非(~)、或(|)、異或(^)   最近看HashMap原始碼,遇到了這樣一段程式碼: 1 static final int hash(Object key) { 2 int h; 3