TensorFlow擬合線性函數

TensorFlow擬合線性函數

簡單的TensorFlow圖構造

以單個神經元爲例
x_data數據爲20個隨機 [0, 1) 的32位浮點數按照 shape=[20] 組成的張量
y_data爲 y = 3*x_data + 0.5 也爲 shape=[20]dom

初始化此神經元的 weight 爲 [-1, 1) 之間的一個隨機32位浮點數
初始化此神經元的 bias 爲 0函數

偏差(Loss)選擇爲神經元輸出結果與y_data的差平方平均值測試

Optimizer概覽

Optimizer的選擇通常由data的size及shape決定優化

class tf.train.GradientDescentOptimizer
隨機梯度降低優化器,SGD,stochastic gradient descent,最普通,最慢,相對比較準確
Learing Rate根據Cost選擇code

class tf.train.MomentumOptimizer
動量法優化器,廣泛,比GradientDescent快的多,開始可能誤差較大,後來糾正很快,隨時間遷移orm

class tf.train.AdamOptimizer 廣泛
class tf.train.AdadeltaOptimizer
class tf.train.AdagradOptimizer
class tf.train.FtrlOptimizer
class tf.train.RMSPropOptimizer AlphaGo使用it

Gradient Descent Optimizer

梯度降低優化器 learning rate 0.75
三個數值爲weight bias loss
200步以後 3. 0.5 0.0 完美io

其餘Optimizer

todo: 改變 learing rate 及其餘參數對其餘Optimizer進行測試ast

Code

import tensorflow as tf

# to fitting an unary linear function

# creat data
x_data = tf.random_uniform([20], 0, 1)
y_data = x_data*3 + 0.5

# creat tensorflow stuctrue start
Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
biases = tf.Variable(tf.zeros([1]))

output = Weights*x_data + biases

loss = tf.reduce_mean(tf.square(output - y_data))
optimizer = tf.train.AdamOptimizer(0.75)
train = optimizer.minimize(loss)
# creat tensorflow stuctrue end


# run tensorflow
init = tf.initialize_all_variables()
with tf.Session() as sess:
    sess.run(init)
    for i in range(1, 201):
        sess.run(train)
        if i%20 == 0:
            #print("x_data:\n", x_data,"\ny_data:\n", y_data)
            print(i, sess.run(Weights), sess.run(biases), sess.run(loss))
相關文章
相關標籤/搜索