TensorFlow入門教程:12:訓練結果的視覺化分析
阿新 • • 發佈:2018-12-12
上篇文章模擬了線性迴歸下的訓練的過程,並演示了訓練後的線性模型對資料的適應程度,同時使用視覺化的方式看到了結果的顯示,在學習的過程中,合理利用諸如matplotlib等庫函式,可以非常有效地對結果進行整體把握。 在篇文章中將繼續使用簡單的plot函式結合線性迴歸的結果,進行訓練的中間結果和過程能有很好的把控。
前提準備
關於線性迴歸的詳細,請參看:
程式碼準備
程式碼說明部分也參看如下文章:
視覺化結果顯示部分
plt.plot(xdata,ydata,‘r’,label=‘expected: 3*x + 1’)
程式碼示例
liumiaocn:Notebook liumiao$ cat basic-operation-7.py import tensorflow as tf import numpy as np import os import matplotlib.pyplot as plt os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' xdata = np.linspace(0,1,100) ydata = 2 * xdata + 1 print("init modole ...") X = tf.placeholder("float",name="X") Y = tf.placeholder("float",name="Y") W = tf.Variable(3., name="W") B = tf.Variable(3., name="B") linearmodel = tf.add(tf.multiply(X,W),B) lossfunc = (tf.pow(Y - linearmodel, 2)) learningrate = 0.01 print("set Optimizer") trainoperation = tf.train.GradientDescentOptimizer(learningrate).minimize(lossfunc) sess = tf.Session() init = tf.global_variables_initializer() sess.run(init) print("caculation begins ...") for j in range(100): for i in range(100): sess.run(trainoperation, feed_dict={X: xdata[i], Y:ydata[i]}) #print("i = " + str(i) + "b: " + str(B.eval(session=sess)) + ", w : " + str(W.eval(session=sess))) print("caculation ends ...") print("##After Caculation: ") print(" B: " + str(B.eval(session=sess)) + ", W : " + str(W.eval(session=sess))) plt.scatter(xdata,ydata) plt.plot(xdata,ydata,'r',label='expected: 3*x + 1') plt.plot(xdata,B.eval(session=sess)+W.eval(session=sess)*xdata,'b',label='caculated : w*x + b') plt.legend() plt.show() liumiaocn:Notebook liumiao$
結果確認
可以看出兩條線完全重合在了一起,對於結果,因為無法確認,這裡將結果的顯示使用subplot進行進一步細化
視覺化結果顯示部分
將期待值和計算出來的結果分別顯示出來,可進行進一步地確認
plt.subplot(1,2,1) plt.scatter(xdata,ydata) plt.plot(xdata,ydata,‘r’,label=‘expected: 3*x + 1’) plt.legend() plt.subplot(1,2,2) plt.scatter(xdata,ydata) plt.plot(xdata,B.eval(session=sess)+W.eval(session=sess)xdata,‘b’,label='caculated : w
x + b’) plt.legend()
程式碼示例
liumiaocn:Notebook liumiao$ cat basic-operation-7.py import tensorflow as tf import numpy as np import os import matplotlib.pyplot as plt os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' xdata = np.linspace(0,1,100) ydata = 2 * xdata + 1 print("init modole ...") X = tf.placeholder("float",name="X") Y = tf.placeholder("float",name="Y") W = tf.Variable(3., name="W") B = tf.Variable(3., name="B") linearmodel = tf.add(tf.multiply(X,W),B) lossfunc = (tf.pow(Y - linearmodel, 2)) learningrate = 0.01 print("set Optimizer") trainoperation = tf.train.GradientDescentOptimizer(learningrate).minimize(lossfunc) sess = tf.Session() init = tf.global_variables_initializer() sess.run(init) print("caculation begins ...") for j in range(100): for i in range(100): sess.run(trainoperation, feed_dict={X: xdata[i], Y:ydata[i]}) #print("i = " + str(i) + "b: " + str(B.eval(session=sess)) + ", w : " + str(W.eval(session=sess))) print("caculation ends ...") print("##After Caculation: ") print(" B: " + str(B.eval(session=sess)) + ", W : " + str(W.eval(session=sess))) plt.subplot(1,2,1) plt.scatter(xdata,ydata) plt.plot(xdata,ydata,'r',label='expected: 3*x + 1') plt.legend() plt.subplot(1,2,2) plt.scatter(xdata,ydata) plt.plot(xdata,B.eval(session=sess)+W.eval(session=sess)*xdata,'b',label='caculated : w*x + b') plt.legend() plt.show() liumiaocn:Notebook liumiao$
結果確認
可以看出左右基本完全平行,期待值和計算結果幾乎沒有區別。
總結
通過活用視覺化的一些庫函式,可以對學習和訓練的確認起到事半功倍的作用,這篇文章舉了一個簡單的例子,通過確認結果直線的擬合程度來判斷學習的效果,在實際的有噪聲的資料中可以起到更加明顯的作用。