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