美文网首页我爱编程
读书笔记:TensorFlow机器学习实战指南

读书笔记:TensorFlow机器学习实战指南

作者: 惊起却回首 | 来源:发表于2018-03-11 22:43 被阅读0次

Frank He 3/10/2018

约定数据源用椭圆形,数据池用方形,函数用同心圆,变量用圆形,loss用菱形,计算流用实线,控制流用虚线

一、一个简单的例子:线性回归

1.模型

Model

图中浅绿色的部分就是要训练的模型,这个例子中为y=Ax+b的线性模型

2.TensorFlow的Code模板

  • 加载库和数据集
  import matplotlib.pyplot as plt
  import numpy as np
  import tensorflow as tf
  from tensorflow.python.framework import ops
  ops.reset_default_graph()
  sess=tf.Session()
  …………
  • 定义节点(数据源,数据池,变量)
    注意变量需要初始化,比如:
  width=np.array([x[3] for x in iris.data])
  length=np.array([x[0] for x in iris.data])
  x0=tf.placeholder(shape=[None,1],dtype=tf.float32)#x0和y0都是一维列向量,此处不能定义为1*1矩阵
  y0=tf.placeholder(shape=[None,1],dtype=tf.float32)
  A=tf.Variable(tf.random_normal(shape=[1,1]))#正态随机数初始化A和b
  b=tf.Variable(tf.random_normal(shape=[1,1]))
  • 构建模型(线性、非线性)
  • 选取损失函数(L1,L2,Psuedo-Huber,Hinge,Cross-Entroy)
  • 初始化任务
    init=tf.global_variables_initializer()
    sess.run(init)
  • 定义训练步骤
    rate=0.05 #rate可以选
    GDO=tf.train.GradientDescentOptimizer(rate) #也可以用其他优化器
    TrainStep=GDO.minimize(loss)
  • 开始训练
    for i in range(100):
    num=np.random.choice(len(width),size=BatchSize)
    x0_rand=np.transpose([width[num]])
    y0_rand=np.transpose([length[num]])
    sess.run(TrainStep,feed_dict={x0:x0_rand,y0:y0_rand})

注意一下sess.run(),只有TrainStep和Loss的sess.run()需要feed

  • 取回训练结果并评估
    完整代码如下:
    import matplotlib.pyplot as plt
    import numpy as np
    import tensorflow as tf
    from sklearn import datasets
    from tensorflow.python.framework import ops
    ops.reset_default_graph()
    sess=tf.Session()
    iris=datasets.load_iris()

    width=np.array([x[3] for x in iris.data])
    length=np.array([x[0] for x in iris.data])
    x0=tf.placeholder(shape=[None,1],dtype=tf.float32)#x0和y0都是一维列向量,此处不能定义为1*1矩阵
    y0=tf.placeholder(shape=[None,1],dtype=tf.float32)
    A=tf.Variable(tf.random_normal(shape=[1,1]))#正态随机数初始化A和b
    b=tf.Variable(tf.random_normal(shape=[1,1]))

    y=tf.add(tf.matmul(x0,A),b)#模型是y=Ax+b
    loss=tf.reduce_mean(tf.square(y-y0))#误差用残差平方和计量

    init=tf.global_variables_initializer()
    sess.run(init)


    rate=0.05
    GDO=tf.train.GradientDescentOptimizer(rate)
    TrainStep=GDO.minimize(loss)

    losslist=[]
    BatchSize=25
    for i in range(100):
    num=np.random.choice(len(width),size=BatchSize)#在0~len(width)之间随机采样BatchSize个数据
    x0_rand=np.transpose([width[num]])#标量经过转置变为一维列向量
    y0_rand=np.transpose([length[num]])
    sess.run(TrainStep,feed_dict={x0:x0_rand,y0:y0_rand})#投喂训练
    TempLoss=sess.run(loss,feed_dict={x0:x0_rand,y0:y0_rand})
    losslist.append(TempLoss)
    if((i+1)%25==0):
        print('Step #'+str(i+1)+'   '+str(TempLoss))


    [slope]=sess.run(A)
    [intercept]=sess.run(b)
    bestfit=[]
    for i in width:
    bestfit.append(slope*i+intercept)
    plt.plot(width,length,'o',label="OriginalData")
    plt.plot(width,bestfit,'r-',label="BestLine")
    plt.show()
    plt.plot(losslist,'k-')
    plt.show()

拟合效果如图:


BestLine

偏差随训练次数增加而下降:


Loss

3.讨论一下损失函数的选择

  • 学习速率为0.05时,各损失函数下降曲线比较


    学习速率为0.05时,各损失函数下降曲线

    其中蓝色为残差平方和,绿色为绝对差和,橙色为垂直距离和,红色为交叉熵

  • 学习速率为0.4时,各损失函数下降曲线比较


    学习速率为0.4时,各损失函数下降曲线

二、非线性回归

相关文章

网友评论

    本文标题:读书笔记:TensorFlow机器学习实战指南

    本文链接:https://www.haomeiwen.com/subject/wplgfftx.html