06 使用Tensorflow擬合x與y之間的關系


    看代碼:

import tensorflow as tf
import numpy as np

#構造輸入數據(我們用神經網絡擬合x_data和y_data之間的關系)
x_data = np.linspace(-1,1,300)[:, np.newaxis] #-1到1等分300份形成的二維矩陣
noise = np.random.normal(0,0.05, x_data.shape) #噪音,形狀同x_data在0-0.05符合正態分布的小數
y_data = np.square(x_data)-0.5+noise #x_data平方,減0.05,再加噪音值

#輸入層(1個神經元)
xs = tf.placeholder(tf.float32, [None, 1]) #占位符,None表示n*1維矩陣,其中n不確定
ys = tf.placeholder(tf.float32, [None, 1]) #占位符,None表示n*1維矩陣,其中n不確定

#隱層(10個神經元)
W1 = tf.Variable(tf.random_normal([1,10])) #權重,1*10的矩陣,並用符合正態分布的隨機數填充
b1 = tf.Variable(tf.zeros([1,10])+0.1) #偏置,1*10的矩陣,使用0.1填充
Wx_plus_b1 = tf.matmul(xs,W1) + b1 #矩陣xs和W1相乘,然后加上偏置
output1 = tf.nn.relu(Wx_plus_b1) #激活函數使用tf.nn.relu

#輸出層(1個神經元)
W2 = tf.Variable(tf.random_normal([10,1]))
b2 = tf.Variable(tf.zeros([1,1])+0.1)
Wx_plus_b2 = tf.matmul(output1,W2) + b2
output2 = Wx_plus_b2

#損失
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-output2),reduction_indices=[1])) #在第一維上,偏差平方后求和,再求平均值,來計算損失
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) # 使用梯度下降法,設置步長0.1,來最小化損失

#初始化
init = tf.global_variables_initializer() #初始化所有變量
sess = tf.Session()
sess.run(init) #變量初始化

#訓練
for i in range(1000): #訓練1000次
    _,loss_value = sess.run([train_step,loss],feed_dict={xs:x_data,ys:y_data}) #進行梯度下降運算,並計算每一步的損失
    if(i%50==0):
        print(loss_value) # 每50步輸出一次損失

    輸出:

0.405348
0.00954485
0.0068925
0.00551958
0.00471453
0.00425206
0.00400382
0.00381883
0.00367445
0.00353349
0.00341325
0.00330487
0.00321128
0.00313468
0.0030646
0.0030014
0.00294802
0.00290179
0.0028618
0.00282344

    可以看到,隨機訓練的進行,損失越來越小,證明擬合越來越好。

    參考資料:

    《Tensorflow 自帶可視化Tensorboard使用方法 附項目代碼》:http://blog.csdn.net/jerry81333/article/details/53004903

    《tensorflow學習(六):tensorflow中的tf.reduce_mean()這類函數》:http://blog.csdn.net/qq_32166627/article/details/52734387

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM