close

這個嘛,最近因為有點閒

找工作找到懷疑人森(誰叫你自己把offer都推光的...)

所以又想來看看神經網路的東西

說到這個神經網路呢,其實以前有接觸過一點,不過那真的是很久以前了

後來工作之後也都沒複習或是用到,現在都忘得差不多了

所以藉這個機會來好好學習一下,主要是使用tensorflow,語言是python

 

今天就簡單講一下建構一個神經網路的流程,大概可以分成幾項:

1. 設定輸入

2. 設定各層神經網路和輸出層

3. 決定loss函數

4. 決定訓練目標

5. 開始訓練

 

以下就以一個簡單的例子來介紹這幾個步驟

假設今天有一個式子:y=3x+5

我們只有一些正確的輸入和解(假設有100組)

但並不知道3和5這兩個數值,只能假設他們是a和b,現在要經由神經網路來求出a和b的值

 

...有人會覺得是不是有病,這不是兩組解帶入就解完了嗎

這只是個例子啊,不要太在意XDDD

 

首先先import兩個module

import tensorflow as tf

import numpy as np

 

再來第一步我們要產生100組隨機的數值作為正確的輸入和解

x_data = np.random.rand(100)

y_data = x_data*3.0 + 5.0

這樣一來y_data就代表正確的解了,我們之後可以拿y_data和網路的輸出做比較,藉由這個誤差值去調整網路的參數

 

然後我們可以開始建立我們的網路

話是這麼說,不過這個題目實在不需要什麼網路,直接代進去求就可以了

所以我們設定兩個變數a和b作為輸出節點,也就是我們要求的東西,還有網路的輸出y作為和y_data比較的依據:

a = tf.Variable(0.)

b = tf.Variable(0.)

y = x_data*a + b

 

接著設定loss函數,一般來說就是表示輸出和實際解的誤差,這邊直接把他平方而已:

loss = tf.reduce_mean(tf.square(y_data - y))

 

再來是optimizer,這邊用簡單的梯度下降法來做,當然還有很多其他的方法,學習率設為0.2

optimizer = tf.train.GradientDescentOptimizer(0.2)

 

再來設定訓練目標,一般都是最小化loss函數,誤差越小越好這樣

train = optimizer.minimize(loss)

 

然後初始化所有變數:

init = tf.global_variables_initializer()

 

設定完之後,我們就可以建立session來進行訓練:

with tf.Session() as sess:
    sess.run(init)
    
    for i in range(50):
        sess.run(train)
        if i%5 == 0:
            print(i, sess.run([a, b]))

 

這邊有一點比較重要,就是前面設定的所有東西,都必須藉由session.run()之後才能產生數值來用

簡單說前面的所有設定都是graph就對了,一定要再session裡執行

 

這就是個簡單的小例子

其實之後的架構也差不多是這樣,只是會稍微複雜一點而已

這是一個linear regression的求解問題,之後再來講一些分類問題之類的吧

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 頁頁頁六滴 的頭像
    頁頁頁六滴

    人森很精彩,所以要把所有事情都記起來=ˇ=

    頁頁頁六滴 發表在 痞客邦 留言(0) 人氣()