Tensorflow学习-No.1

作者: 还有下文 | 来源:发表于2019-04-13 00:28 被阅读22次

    0 深度学习模型训练入门

    1 导入依赖

    from future 把下一个新版本的特性导入到当前版本 (如果某个版本中出现了某个新的功能特性,而且这个特性和当前版本中使用的不兼容,也就是它在该版本中不是语言标准,那么我如果想要使用的话就需要从future模块导入)

    absolute_import 绝对引入

    division 精确除法

    print_function 指print需要加括号

    unicode_literals 为了适应Python 3.x的新的字符串的表示方法,将所有字符串都视为unicode

    • 导入 tensorflow

      tf.logging.set_verbosity 为将要被记录的的东西(日志)设置开始入口

    • 导入numpy

    • 将数据表示成高性能的列表

    from __future__ import absolute_import, division, print_function, unicode_literals
    import tensorflow as tf
    tf.logging.set_verbosity(tf.logging.ERROR)
    import numpy as np
    

    2 设置训练数据

    celsius_q = np.array([-40, -10, 0, 8, 15, 22, 38], dtype=float)
    fahrenheit_a = np.array([-40, 14, 32, 46, 59, 72, 100], dtype=float)
    for i,c in enumerate(celsius_q):
      print("%s degrees Celsius = %s degress Fahrenheit" % (i, c))
    

    3 生成模型

    • build a layer
    • 将layer导入模型
    layer0 = tf.keras.layers.Dense(units=1,input_shape=[1])
    model = tf.keras.Sequential([layer0])
    

    另一种写法

    model = tf.keras.Sequential([
         tf.keras.layers.Dense(units=2, input_shape=[1])
     ])
    

    4 编译模型

    • 定义损失函数 loss function : 衡量预测值和正确值差距(即损失)的方法
    • 定义优化函数 optimizer function :调整模型参数以减少损失的方法
    model.compile(loss='mean_squared_error',
                 optimizer=tf.keras.optimizers.Adam(0.1))
    

    其中optimizer的参数:
    0.1为学习率,Adam的学习率范围为[0.001,0.1]
    太小,学习的迭代次数会很多
    太大,模型的精确率会降低

    5 训练模型

    • fit
    history = model.fit(celsius_q, fahrenheit_a, epochs=500, verbose=0)
    print("Finished training the model.")
    

    第一个参数是输入
    第二个参数是输出
    epochs :运行这个循环的次数
    verbose :控制fit产生的输出量
    verbose:日志显示
    verbose = 0 为不在标准输出流输出日志信息
    verbose = 1 为输出进度条记录
    verbose = 2 为每个epoch输出一行记录
    注意: 默认为 1

    6 展示训练数据

    通过fit方法 我们得到了history类,可以用这个类画出 经过每次训练轮次之后模型的损失

    • matplot

      提供可视化方案

    import matplotlib.pyplot as plt
    plt.xlabel('Epoch Number')
    plt.ylabel("Loss Magnitude")
    plt.plot(history.history['loss'])
    
    image.png

    7 用训练之后的模型进行预测

    • predict
    print(model.predict([100.0]))
    
    image.png
    image.png

    8 回顾和查看参数(layer weights)

    我们创建了一个全连接层,训练了3500个样本(7对样本、500轮次)

    print("These are the layer variables: {}".format(layer0.get_weights()))
    

    9 关于这个例子的增强版

    用3层网络进行建模:
    l0(1 * 4)
    l1(4 * 4)
    l2(4 * 1)

    l0 = tf.keras.layers.Dense(units=4, input_shape=[1])  
    l1 = tf.keras.layers.Dense(units=4)  
    l2 = tf.keras.layers.Dense(units=1)  
    model = tf.keras.Sequential([l0, l1, l2])
    model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(0.1))
    model.fit(celsius_q, fahrenheit_a, epochs=500, verbose=False)
    print("Finished training the model")
    print(model.predict([100.0]))
    print("Model predicts that 100 degrees Celsius is: {} degrees Fahrenheit".format(model.predict([100.0])))
    print("These are the l0 variables: {}".format(l0.get_weights()))
    print("These are the l1 variables: {}".format(l1.get_weights()))
    print("These are the l2 variables: {}".format(l2.get_weights()))
    
    image.png

    10 参考

    相关文章

      网友评论

        本文标题:Tensorflow学习-No.1

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