這個嘛,最近因為有點閒
找工作找到懷疑人森(誰叫你自己把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的求解問題,之後再來講一些分類問題之類的吧
留言列表