廢話不多說,直接開始 1.首先,導入所需的模塊: 關閉tensorflow輸出的一大堆硬體信息 2.寫一個函數generate_data(),用來生成我們所需要的數據,這裡使用的線性函數是y = 0.1*x + 0.3,具體解釋見註釋 說一下上面8,9兩行的操作,其實 與 等價,只是這樣寫比較方便。 ...
廢話不多說,直接開始
1.首先,導入所需的模塊:
import numpy as np import os import tensorflow as tf
關閉tensorflow輸出的一大堆硬體信息
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
2.寫一個函數generate_data(),用來生成我們所需要的數據,這裡使用的線性函數是y = 0.1*x + 0.3,具體解釋見註釋
def generate_data():#隨機生成測試數據 num_points = 1000 vector_set = [] for i in range(num_points): x1 = np.random.normal(0.0, 0.55) y1 = x1 * 0.1 + 0.3 + np.random.normal(0.0, 0.03)#以函數y = 0.1x+0.3為基準生成點數據,加上一個隨機值是為了防止生成的點都嚴格在一條直線上 vector_set.append([x1, y1]) x_data = [v[0] for v in vector_set]#就是vector_set裡面的所有x1組成的列表 y_data = [v[1] for v in vector_set]#同上 return x_data, y_data
說一下上面8,9兩行的操作,其實
x_data = [v[0] for v in vector_set]
與
for i in vector_set: x_data.append(i[0])
等價,只是這樣寫比較方便。
3.接下來就是我們的計算圖的構建了
首先介紹一些東西:
tf.random_uniform(shape, a, b)#用來生成a~b範圍內的均勻分佈的隨機數,其中shape是生成的張量的形狀 tf.square(a)#計算a的平方 tf.reduce_mean()#(不指定axis的情況下)就是計算平均值 tf.train.GradientDescentOptimizer(0.5)#tf.train裡面有許多優化方法,這裡使用GradientDescentOptimizer()參數是學習率,範圍0~1
博主也只是略知一二,具體可以去查手冊或百度
代碼如下,也是有註釋的(註意,下麵的*,+,-都是張量運算)
def train(x_data, y_data): w = tf.Variable(tf.random_uniform([1], -1.0, 1.0), name = 'w')#生成均勻分佈的值,其中[1]可以換成(1, ),表示矩陣的形狀 b = tf.Variable(tf.zeros([1]), name = 'b')#b初始化為0 y = w * x_data + b#根據隨機生成的w, x_data, b計算y loss = tf.reduce_mean(tf.square(y - y_data), name = 'loss')#tf.square()平方,tf.reduce_mean(不指定axis的情況下)就是計算平均值,所以loss就是標準差 optimizer = tf.train.GradientDescentOptimizer(0.5)#設置學習率為0.5 train = optimizer.minimize(loss, name = 'train')#使用優化器通過損失函數調整神經網路權值 with tf.Session() as sess:#開啟任務,為了方便,起了別名sess init = tf.global_variables_initializer()#同上 sess.run(init)#初始化全部變數 print('w = ', sess.run(w), 'b = ', sess.run(b), 'loss = ', sess.run(loss))#這是隨機生成的,開始訓練前的w,b和損失 for step in range(50):#一共訓練50次 sess.run(train) print('w = ', sess.run(w), 'b = ', sess.run(b), 'loss = ', sess.run(loss))#這是每一次訓練後的w,b和損失
最後只要調用這兩個函數就行了
if __name__ == "__main__": x_data, y_data = generate_data() train(x_data, y_data)
對了,二次方程,甚至多次方程也可以哦
那麼今天就到這裡。
See you next time!