深度學習最火的框架之一:TensorFlow,如何找到一個入門的突破口呢?本文通過一篇TensorFlow實戰,總結如何用 TensorFlow 做線性迴歸,主要步驟如下。有了這些基礎後,為我們今後開展更復雜的應用TensorFlow解決圖像處理,自然語言處理,行為預測等打下基礎。
藉助tensorflow如何實現最小二乘法的線性迴歸呢?基本的思路,首先生成擬合的數據集,然後構建線性迴歸的Graph,最後在Session中迭代train器,得到擬合的參數w和b,畫出擬合曲線。
1.1 生成擬合的數據集
數據集只含有一個特徵,注意誤差項需要滿足高斯分佈,其分佈的代碼如下,首先導入3個庫,
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
#數據點100個
num_points = 100
vectors_set = []
for i in range(num_points):
x1 = np.random.normal(0.,0.55)
y1 = x1 * 0.1 + 0.3 + np.random.normal(0.0,0.03)
vectors_set.append([x1,y1])
#特徵x
x_data = [v[0] for v in vectors_set]
#標籤值y
y_data = [v[1] for v in vectors_set]
plt.scatter(x_data,y_data,c='b')
plt.show()
產生的數據分佈如下所示:
1.2 構建線性迴歸的Graph
w = tf.Variable(tf.random_uniform([1],-1.,1.),name='myw')
b = tf.Variable(tf.zeros([1]),name='myb')
#經過計算得出預估值
y = w * x_data + b
#以預估值y和實際值y_data之間的均方差作為損失
loss = tf.reduce_mean(tf.square(y-y_data,name='mysquare'), name='myloss')
#採用梯度下降法來優化參數
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss,name='mytrain')
1.3 在Session中運行構建好的Graph
#global_variables_initializer初始化Variable等變量
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
print("w=", sess.run(w),"b=",sess.run(b),sess.run(loss))
#迭代20次train
for step in range(20):
sess.run(train)
print("w=", sess.run(w),"b=",sess.run(b),sess.run(loss))
#寫入磁盤,提供tensorboard在瀏覽器中展示用
writer = tf.summary.FileWriter("./mytmp",sess.graph)
打印下w和b,損失值的變化情況,可以看到損失值從0.24降到0.0008.
1.4繪製擬合曲線
plt.scatter(x_data,y_data,c='b')
plt.plot(x_data,sess.run(w)*x_data+sess.run(b))
plt.show()
02
—
Tensorboard展示Graph
關於如何在tensorboard中展示構建好的Graph,請參考文章,不再贅述,直接分析tensorflow繪製的graph.
得到的Graph界面如下所示:
Main Graph視圖放大版,數據從底部是如何經過Operators,流動到頂部的,大家可以順一下。
以上就是在tensorflow中做基本的線性迴歸的基本步驟,利用這個最基本的任務,先體會下tensorflow做迴歸的過程。
閱讀更多 Python與算法社區 的文章