標籤

中國 (3) 化妝品 (1) 手機 (5) 手錶 (1) 文創 (1) 日本 (2) 台北 (2) 全聯 (1) 好文章 (10) 有錢人 (1) 百度 (1) 男女 (6) 咖啡 (1) 宗教 (1) 服務 (1) 法律 (1) 直銷 (7) 社維法 (1) 芳療 (1) 保健 (8) 勇者 (1) 政治 (5) 科技 (6) 風景 (1) 剝蛋技術 (1) 剝蝦技術 (1) 消費者 (3) 馬雲 (5) 健康 (3) 教育 (13) 聆聽 (3) 軟體 (1) 陸台資 (1) 創業 (12) 無人機 (1) 華人健康網 (2) 雲端科技 (6) 經濟 (4) 電商 (3) 電腦 (3) 演藝 (1) 澎湖 (1) 震撼 (2) 營養 (4) 聯盟 (3) 賽車 (2) 趨勢 (3) 韓國 (1) 鴻海 (2) 職場 (2) 觀光 (1) blogger (1) fb (2) gmail (1) google (1) INTERUSH (2) IT (6) O2O (1) tensorflow教學 (1)

2016年5月17日 星期二

類神經網路tensorflow教學-1

tensorflow教學(1) -- 建置一個基礎神經網路
分享:
本文參考莫凡youtube 教學:

本文摘要自 網路上youtube 莫凡教學

其實我覺得莫凡講得很好 很適合初學者

有時間的話可以把他一系列的影片都看過一遍

本教學 教你 如何建置一個最基礎的神經網路

用建置的神經網路

學習一個簡單方程式 y=0.1x+0.3

這裡我們要學習的就是 W(weight)=0.1 b(biase)=0.3

如果我們每次輸入網路的 X 例如:打入10

都可以變成 10*0.1 +0.3 =1.3 的話

那麼我們就會說 這個網路已經學習完成了


下圖即為我們要學習的網路

輸入一個神經元

輸出一個神經元



但這後來被證明 連一個簡單的Xor 函數都學不起來

因此進入類神經的寒冬

後人們發現中間加一層隱藏層即可解決此問題

因此類神經又興盛起來

但研究人員發現他的效果還是有限

尤其要訓練大網路的時候

會遇到Error 往前傳越小的問題

具體說明可以看這個:

https://www.youtube.com/watch?v=YoiUlN_77LU

深度學習解決了這個問題

因此類神經又再度興起了!!!


這是小編覺得講得很好的一個網站

http://neuralnetworksanddeeplearning.com/chap4.html

他用可視化證明了 一個類神經網路 只要給他足夠的神經元

就可以模擬任何非線性函數

讀者有時間也可以看看其他章節

講的也很棒


下面是簡單的小例子 模擬類神經網路學習的情形~

總共更新201次weights

並且每訓練20次印出一次


小編把每一行代碼都清清楚楚的加上註解了

希望各位可以經由這小小的範例

慢慢進入這 Tensorflow 神聖之殿中

如果有任何不懂得可以在下面留言問小編喔~~

祝大家學習愉快~~


程式碼:

#-*- coding: utf-8 -*- 
#引用必要函數
import tensorflow as tf
import numpy as np
# creat data
#創造 亂數100個亂數 值介於0~1之間
x_data = np.random.rand(100).astype(np.float32)
#訂出要學習的函數  這裡要學的是 weight:0.1  biases:0.3
y_data = x_data*0.1+0.3
###creat tensorflow structure start###
#定立 weights 的 範圍 和初始化
Weights = tf.Variable(tf.random_uniform([1],-1.0,1.0))
biases = tf.Variable(tf.zeros([1]))
#定立 給 tensorflow 學習的函數
y = Weights*x_data + biases
#建立 loss 規則
loss = tf.reduce_mean(tf.square(y-y_data))
#選擇學習機制
optimizer = tf.train.GradientDescentOptimizer(0.5)  #learning rate
#像tensorflow 說 訓練規則就是把 loss 減到最小 最好是0
train = optimizer.minimize(loss)
#初始化所有變數
init = tf.initialize_all_variables()
###creat tensorflow structure end###
#上面都是建立規則
#*****************************************************開始訓練
#建立sess
sess = tf.Session()
#記得初始化
sess.run(init)     #Very important
"""
跑 for 迴圈 更新wight201次
然後每訓練20次 印出一次weight
"""
for step in range(201):
    sess.run(train)
    if step % 20 ==0:
        print(step,sess.run(Weights),sess.run(biases))
view raweasy_network.py hosted with ❤ by GitHub
程式輸出:

(0, array([ 0.30737674], dtype=float32), array([ 0.25841016], dtype=float32))
(20, array([ 0.13939281], dtype=float32), array([ 0.27776307], dtype=float32))
(40, array([ 0.10886393], dtype=float32), array([ 0.29499638], dtype=float32))
(60, array([ 0.10199451], dtype=float32), array([ 0.29887414], dtype=float32))
(80, array([ 0.10044879], dtype=float32), array([ 0.29974666], dtype=float32))
(100, array([ 0.10010101], dtype=float32), array([ 0.299943], dtype=float32))
(120, array([ 0.10002275], dtype=float32), array([ 0.29998717], dtype=float32))
(140, array([ 0.10000515], dtype=float32), array([ 0.29999712], dtype=float32))
(160, array([ 0.10000117], dtype=float32), array([ 0.29999936], dtype=float32))
(180, array([ 0.10000026], dtype=float32), array([ 0.29999986], dtype=float32))
(200, array([ 0.10000011], dtype=float32), array([ 0.29999995], dtype=float32))

沒有留言:

張貼留言