1 TensorFlow入門筆記之基礎架構

————————————————————————————————————

寫在開頭:此文參照莫煩python教程(牆裂推薦!!!)

————————————————————————————————————

TensorFlow入門筆記之基礎架構

1 構建簡單神經網絡:一維線性預測

#導入相關庫
import tensorflow as tf
import numpy as np
#用隨機數生成x
x_data = np.random.rand(100).astype(np.float32)  #生成100個x
y_data = x_data * 0.1 + 0.3      #設定y=0.1x+0.3
#構建神經網絡
Weights = tf.Variable(tf.random_uniform([1],-1.0,1.0))#初始化Weights爲-1.0到1.0的某個隨機數
biases = tf.Variable(tf.zeros([1]))  #biases初始化爲0

y = Weights*x_data + biases   #計算當前神經網絡預測的y

loss = tf.reduce_mean(tf.square(y-y_data)) #損失函數

optimizer = tf.train.GradientDescentOptimizer(0.5) #神經網絡優化器,0.5爲學習效率,一般小於1
train = optimizer.minimize(loss)  #訓練使得損失函數最小

init = tf.initialize_all_variables() #初始化神經網絡的結構
#激活神經網絡
sess = tf.Session()
sess.run(init)   #激活
for step in range(201):
    sess.run(train)
    if step % 20 == 0:  #每20步打印訓練的Weights和biases
        print(step,sess.run(Weights),sess.run(biases))  #依次輸出步數和當前Weights和當前biases
0 [0.0999992] [0.3000004]
20 [0.09999981] [0.3000001]
40 [0.0999999] [0.30000007]
60 [0.0999999] [0.30000007]
80 [0.0999999] [0.30000007]
100 [0.0999999] [0.30000007]
120 [0.0999999] [0.30000007]
140 [0.0999999] [0.30000007]
160 [0.0999999] [0.30000007]
180 [0.0999999] [0.30000007]
200 [0.0999999] [0.30000007]

因爲我們的Weights真實值爲0.1,biases真實值爲0.3,所以從上面結果可知,這個網絡的效果還是挺不錯的!

2 Session 會話控制

可以用Session.run()來運行已經創好了的結構

import tensorflow as tf

matrix1 = tf.constant([[3,3]])
matrix2 = tf.constant([[2],
                       [2]])
product = tf.matmul(matrix1,matrix2)  #矩陣相乘

下面有兩種方式來進行會話控制

#方式一
sess = tf.Session()
result = sess.run(product)
print(result)
sess.close()
[[12]]
#方式二,with部分運行後,會自動close Session,而不同顯示close
with tf.Session()as sess:
    result2 = sess.run(product)
    print(result2)
[[12]]

上面兩種方式得到的結果都是一樣的,均爲12

3 Variable變量

state = tf.Variable(0,name='counter')
print(state.name)#打印看看是啥
counter:0
one = tf.constant(1)  #常量1

new_value = tf.add(state,one) 
update = tf.assign(state,new_value)  #把new_value賦給state

init = tf.initialize_all_variables()#初始化所有變量.一定要記得init所有的Variables

with tf.Session() as sess:
    sess.run(init)
    for _ in range(3):
        sess.run(update)
        print(sess.run(state))
1
2
3

4 Placeholder傳入值

Placeholder主要用來代替某些你不想馬上給定值的變量,而是在run或者特定位置再傳值給它,有點類似於用戶輸入?。。。下面是一個例子。

import tensorflow as tf

input1 = tf.placeholder(tf.float32)#也可以是(tf.float32,[2,2]),這樣給定input1是2行2列的float32
input2 = tf.placeholder(tf.float32)

output = tf.multiply(input1,input2)  #相乘

with tf.Session() as sess:
    print(sess.run(output,feed_dict={input1:[7.],input2:[2.]})) #這裏纔給input1,input2值
[14.]

5 激勵函數

  • 激勵函數可以把線性函數變成非線性函數,常見的激勵函數有:relu/sigmoid/tanh。當然啦,你也可以自己定義激勵函數,但你要保證你的函數是可微分的!
  • 多層神經網絡時要慎重選擇激勵函數。
  • 少量層神經網絡結構可以隨便嘗試激勵函數;卷積神經網絡推薦使用relu;循環神經網絡推薦使用relu/tanh。

*點擊[這兒:TensorFlow]發現更多關於TensorFlow的文章*


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章