TensorFlow入门教程:12:训练结果的可视化分析

版权声明:本文为博主原创文章,未经博主允许欢迎转载,但请注明出处。 https://blog.csdn.net/liumiaocn/article/details/82916560

在这里插入图片描述
上篇文章模拟了线性回归下的训练的过程,并演示了训练后的线性模型对数据的适应程度,同时使用可视化的方式看到了结果的显示,在学习的过程中,合理利用诸如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 : wx + 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$

结果确认

在这里插入图片描述

可以看出左右基本完全平行,期待值和计算结果几乎没有区别。

总结

通过活用可视化的一些库函数,可以对学习和训练的确认起到事半功倍的作用,这篇文章举了一个简单的例子,通过确认结果直线的拟合程度来判断学习的效果,在实际的有噪声的数据中可以起到更加明显的作用。

猜你喜欢

转载自blog.csdn.net/liumiaocn/article/details/82916560
今日推荐