zoukankan      html  css  js  c++  java
  • TensorFlow笔记-模型的保存,恢复,实现线性回归

    模型的保存

    tf.train.Saver(var_list=None,max_to_keep=5)

    •var_list:指定将要保存和还原的变量。它可以作为一个

    dict或一个列表传递.

    •max_to_keep:指示要保留的最近检查点文件的最大数量。

    创建新文件时,会删除较旧的文件。如果无或0,则保留所有

    检查点文件。默认为5(即保留最新的5个检查点文件。)

    saver = tf.train.Saver()
    saver.save(sess, "")

    模型的恢复

    恢复模型的方法是restore(sess, save_path),save_path是以前保存参数的路径,我们可以使用tf.train.latest_checkpoint来获取最近的检查点文件(也恶意直接写文件目录)

    if os.path.exists("tmp/ckpt/checkpoint"):
                saver.restore(sess,"")
                print("恢复模型")

    自定义命令行参数

    import tensorflow as tf
    
    FLAGS = tf.app.flags.FLAGS
    
    tf.app.flags.DEFINE_string('data_dir', '/tmp/tensorflow/mnist/input_data',
                               """数据集目录""")
    tf.app.flags.DEFINE_integer('max_steps', 2000,
                                """训练次数""")
    tf.app.flags.DEFINE_string('summary_dir', '/tmp/summary/mnist/convtrain',
                               """事件文件目录""")
    
    def main(argv):
        print(FLAGS.data_dir)
        print(FLAGS.max_steps)
        print(FLAGS.summary_dir)
        print(argv)
    
    
    if __name__=="__main__":
        tf.app.run()

    线性回归

    准备数据

    with tf.variable_scope("data"):
        # 1、准备数据,x 特征值 [100, 1]   y 目标值[100]
        x = tf.random_normal([100, 1], mean=1.75, stddev=0.5, name="x_data")
        # 矩阵相乘必须是二维的
         y_true = tf.matmul(x, [[0.7]]) + 0.8

    构建模型

    with tf.variable_scope("model"):
        # 2、建立线性回归模型 1个特征,1个权重, 一个偏置 y = x w + b
        # 随机给一个权重和偏置的值,让他去计算损失,然后再当前状态下优化
        # 用变量定义才能优化
        weight = tf.Variable(tf.random_normal([1, 1], mean=0.0, stddev=1.0), name="w")
        bias = tf.Variable(0.0, name="b")
        y_predict = tf.matmul(x, weight) + bias

    构造损失函数

    with tf.variable_scope("loss"):
       # 3、建立损失函数,均方误差
       loss = tf.reduce_mean(tf.square(y_true - y_predict))

    利用梯度下降

    with tf.variable_scope("optimizer"):
           # 4、梯度下降优化损失 leaning_rate: 0 ~ 1, 2, 3,5, 7, 10
           train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

    源码

    import tensorflow as tf
    import os
    
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
    # 在这里立flag
    tf.app.flags.DEFINE_integer("max_step",100,"模型训练的步数")
    tf.app.flags.DEFINE_string("model_dir","tmp/summary/test","模型文件的加载路径")
    
    FLAGS = tf.app.flags.FLAGS
    def myregression():
        with tf.variable_scope("data"):
            x = tf.random_normal([100, 1], mean=1.75, stddev=0.5)
            y_true = tf.matmul(x, [[0.7]]) + 0.8
        with tf.variable_scope("model"):
            # 权重 trainable 指定权重是否随着session改变
            weight = tf.Variable(tf.random_normal([int(x.shape[1]), 1], mean=0, stddev=1), name="w")
            # 偏置项
            bias = tf.Variable(0.0, name='b')
            # 构造y函数
            y_predict = tf.matmul(x, weight) + bias
        with tf.variable_scope("loss"):
            # 定义损失函数
            loss = tf.reduce_mean(tf.square(y_true - y_predict))
        with tf.variable_scope("optimizer"):
            # 使用梯度下降进行求解
            train_op = tf.train.GradientDescentOptimizer(0.1).minimize((loss))
        # 1.收集tensor
        tf.summary.scalar("losses", loss)
        tf.summary.histogram("weights", weight)
        # 2.定义合并tensor的op
        merged = tf.summary.merge_all()
        # 定义一个保存模型的op
        saver = tf.train.Saver()
        with tf.Session() as sess:
            tf.global_variables_initializer().run()
            # import matplotlib.pyplot as plt
            # plt.scatter(x.eval(), y_true.eval())
            # plt.show()
            print("初始化的权重:%f,偏置项:%f" % (weight.eval(), bias.eval()))
            # 建立事件文件
            filewriter = tf.summary.FileWriter('./tmp/summary/test/', graph=sess.graph)
            # 加载模型
            if os.path.exists("tmp/ckpt/checkpoint"):
                saver.restore(sess,FLAGS.model_dir)
                print("加载")
            n = 0
            while loss.eval() > 1e-6:
                n += 1
                if(n==FLAGS.max_step):
                    break
                sess.run(train_op)
                summary = sess.run(merged)
                filewriter.add_summary(summary, n)
                print("第%d次权重:%f,偏置项:%f" % (n, weight.eval(), bias.eval()))
            saver.save(sess, FLAGS.model_dir)
        return weight, bias
    
    
    myregression()
    # x_min,x_max = np.min(x.eval()),np.max(x.eval())
    # tx = np.arange(x_min,x_max,100)

  • 相关阅读:
    Linux概念与体系阅读笔记
    iOS缓存
    iOS开发笔记系列-基础3(多态、动态类型和动态绑定)
    在进入新版本 的时候,进行推送引导
    手机号验证
    通过UIView对象获取该对象所属的UIViewController(转)
    支付宝和微信支付的各种填坑
    IOS开发简单登录LoginViewController、注册RegisterViewController、UcenterViewController功能实现方法
    iOS 注册登录页面
    多媒体元素的使用
  • 原文地址:https://www.cnblogs.com/TimVerion/p/11224498.html
Copyright © 2011-2022 走看看