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

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时,各损失函数下降曲线

二、非线性回归

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容