1. 程式人生 > >TensorFlow入門教程:12:訓練結果的視覺化分析

TensorFlow入門教程: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$

結果確認

在這裡插入圖片描述

可以看出左右基本完全平行,期待值和計算結果幾乎沒有區別。

總結

通過活用視覺化的一些庫函式,可以對學習和訓練的確認起到事半功倍的作用,這篇文章舉了一個簡單的例子,通過確認結果直線的擬合程度來判斷學習的效果,在實際的有噪聲的資料中可以起到更加明顯的作用。