Tensorflow_1

概览

  • 认识Tensorflow
  • Tensorflow基础
  • Tensorfplw进阶
  • 使用Tensorflow实现线性回归的实例

认知Tensorflow

  • 人工智能,机器学习,深度学习的关系

    • 人工智能是一种探究人类的智能活动的机理,用研究得出的理论,方法,技术,去构建智能体,这种智能体有着与人类相似的智能效果,能够像人类一样思考和行动,并进一步提升人的智能。机器学习是人工智能的实现手段,深度学习是其中一种人工神经网络技术的深度发展
  • 深度学习

    • 深度学习,是指人工神经网络的研究个应用
    • 如深度神经网络,卷积神经网络和递归神经网络已经被应用到计算机视觉,语音识别,自然语言处理,音频识别与生物信息学领域并获得了极好的效果
  • Tensorflow

    • Tensorflow是深度学习应用的框架,由谷歌公司开发,是目前最受欢迎的深度学习框架之一
    • 特点:
      • 真正的可移植性:支持CPU,GPU,TPU,可以很好的运行在移动端
      • 多语言支持:c++/python
      • 高度灵活与效率
      • 大树下好乘凉:谷歌
  • 安装 :虚拟环境下:pip install tensorflow==版本号

Tensorflow基础

  • tensor + flow

    • tensor 是tensorflow中的特殊的数据类型,张量,类似numpy中的ndarry可以存储值,也可以存储操作,存储好之后是静态的,不能直接运行
    • 需要在会话中run起来,张量之间的关系和作用像流水一样,流动起来

    • tensorflow是计算密集型框架,注意和django,flask,scrapy等IO密集型框架区分

    • 示例:

    ...
    
    # tensorflow实现加法运算
    
    a_t = tf.constant(10)
    b_t = tf.constant(20)
    
    # 不提倡直接运用这种符号运算符进行计算
    
    
    # 更常用tensorflow提供的函数进行计算
    
    
    # c_t = a_t + b_t
    
    c_t = tf.add(a_t, b_t)
    print("tensorflow实现加法运算:\n", c_t)
    
    # 如何让计算结果出现?
    
    
    # 开启会话
    
    with tf.Session() as sess:
        sum_t = sess.run(c_t)/Users/mengxing/Desktop/code/machine_learning/day08_tensorflow/linear_regression_tf.py
        print("在sess当中的sum_t:\n", sum_t)
    ...
    

Tensorflow进阶

  • 会话
  • 张量
  • 变量

  • 定义了程序的结构
  • tensorflow会默认生成一个图,由一组tensor(变量和操作)组成
  • 调用

    • tf.get_default_graph()
    • operation,session,或者tenso的graph的 graph属性
  • 也可以自定义图

    • g = tf.Graph()
    • 往图里添加操作
    • with g.as_default():
  • 不同的图之间不能互相访问

  • 示例代码:

def graph_demo():
    # 图的演示
    a_t = tf.constant(10)
    b_t = tf.constant(20)
    # 不提倡直接运用这种符号运算符进行计算
    # 更常用tensorflow提供的函数进行计算
    # c_t = a_t + b_t
    c_t = tf.add(a_t, b_t)
    print("tensorflow实现加法运算:\n", c_t)

    # 获取默认图
    default_g = tf.get_default_graph()
    print("获取默认图:\n", default_g)

    # 数据的图属性
    print("a_t的graph:\n", a_t.graph)
    print("b_t的graph:\n", b_t.graph)
    # 操作的图属性
    print("c_t的graph:\n", c_t.graph)

    # 自定义图
    new_g = tf.Graph()
    print("自定义图:\n", new_g)
    # 在自定义图中去定义数据和操作
    with new_g.as_default():
        new_a = tf.constant(30)
        new_b = tf.constant(40)
        new_c = tf.add(new_a, new_b)

    # 数据的图属性
    print("new_a的graph:\n", new_a.graph)
    print("new_b的graph:\n", new_b.graph)
    # 操作的图属性
    print("new_c的graph:\n", new_c.graph)

    # 开启会话
    with tf.Session() as sess:
        sum_t = sess.run(c_t)
        print("在sess当中的sum_t:\n", sum_t)
        # 会话的图属性
        print("会话的图属性:\n", sess.graph)
        # 不同的图之间不能互相访问
        # sum_new = sess.run(new_c)
        # print("在sess当中的sum_new:\n", sum_new)

    with tf.Session(graph=new_g) as sess2:
        sum_new = sess2.run(new_c)
        print("在sess2当中的sum_new:\n", sum_new)
        print("会话的图属性:\n", sess2.graph)

    # 很少会同时开启不同的图,一般用默认的图就够了
    return None

会话

  • 对资源的调度
  • 默认调度默认图,也可以调度自定义图
  • 使用格式

    • 1.sess = tf.Session() sess.run(…) sess.close()
    • 2.使用上下文管理器:
    with tf.Session() as sess:
    sess.run(...)
    
    • 3.eval(),直接获取tensor的值,注意只有在开启的会话中才能使用
  • 示例代码

def session_demo():
    """
    会话演示
    :return:
    """

    a_t = tf.constant(10)
    b_t = tf.constant(20)
    # 不提倡直接运用这种符号运算符进行计算
    # 更常用tensorflow提供的函数进行计算
    # c_t = a_t + b_t
    c_t = tf.add(a_t, b_t)
    print("tensorflow实现加法运算:\n", c_t)

    # 开启会话
    # 传统的会话定义
    # sess = tf.Session()
    # sum_t = sess.run(c_t)
    # print("sum_t:\n", sum_t)
    # sess.close()

    # 开启会话
    with tf.Session() as sess:
        # sum_t = sess.run(c_t)
        # 想同时执行多个tensor
        print(sess.run([a_t, b_t, c_t]))
        # 方便获取张量值的方法
        # print("在sess当中的sum_t:\n", c_t.eval())
        # 会话的图属性
        print("会话的图属性:\n", sess.graph)

    return None

def session_run_demo():
    """
    会话的run方法
    :return:
    """
    # 定义占位符
    a = tf.placeholder(tf.float32)
    b = tf.placeholder(tf.float32)
    sum_ab = tf.add(a, b)
    print("sum_ab:\n", sum_ab)
    # 开启会话
    with tf.Session() as sess:
        print("占位符的结果:\n", sess.run(sum_ab, feed_dict={a: 3.0, b: 4.0}))
    return None
  • 交互式对话

    • 在ipython等测试代码效果解释器中,不用每次都要写会话语句的快捷方式
    • tf.interactiveSession()

    • 示例代码:

    ipython环境中:
    import tensorflow as tf
    td.interactiveSession()
    a = tf.constant(3.0)
    a.eval()
    out:3.0
    
    b = tf.constant(4.0)
    c = tf.multiply(a,b)
    c.eval()
    out:12.0
    

张量

  • 张量是tensorflow管理数据的形式。从功能上讲,可以简单理解为多维数据
  • 一个张量包含三部分信息
    • 名字,形状,数据类型
    • 张量的阶
      • 相当于数组的维的概念
      • 0阶对应0维数组,标量
      • 1阶对应一维数组,列表/向量
      • 2阶对应二维数组,矩阵
  • 示例代码:
def tensor_demo():
    """
    张量的介绍
    :return:
    """
    a = tf.constant(value=30.0, dtype=tf.float32, name="a")
    b = tf.constant([[1, 2], [3, 4]], dtype=tf.int32, name="b")
    a2 = tf.constant(value=30.0, dtype=tf.float32, name="a2")
    c = tf.placeholder(dtype=tf.float32, shape=[2, 3, 4], name="c")
    sum = tf.add(a, a2, name="my_add")
    print(a, a2, b, c)
    print(sum)
    # 获取张量属性
    print("a的图属性:\n", a.graph)
    print("b的名字:\n", b.name)
    print("a2的形状:\n", a2.shape)
    print("c的数据类型:\n", c.dtype)
    print("sum的op:\n", sum.op)

    # 获取静态形状
    print("b的静态形状:\n", b.get_shape())

    # 定义占位符
    a_p = tf.placeholder(dtype=tf.float32, shape=[None, None])
    b_p = tf.placeholder(dtype=tf.float32, shape=[None, 10])
    c_p = tf.placeholder(dtype=tf.float32, shape=[3, 2])
    # 获取静态形状
    print("a_p的静态形状为:\n", a_p.get_shape())
    print("b_p的静态形状为:\n", b_p.get_shape())
    print("c_p的静态形状为:\n", c_p.get_shape())

    # 形状更新
    # a_p.set_shape([2, 3])
    # 静态形状已经固定部分就不能修改了
    # b_p.set_shape([10, 3])
    # c_p.set_shape([2, 3])
    # 静态形状已经固定的部分包括它的阶数,如果阶数固定了,就不能跨阶更新形状
    # 如果想要跨阶改变形状,就要用动态形状
    # a_p.set_shape([1, 2, 3])
    # 获取静态形状
    print("a_p的静态形状为:\n", a_p.get_shape())
    print("b_p的静态形状为:\n", b_p.get_shape())
    print("c_p的静态形状为:\n", c_p.get_shape())

    # 动态形状
    # c_p_r = tf.reshape(c_p, [1, 2, 3])
    c_p_r = tf.reshape(c_p, [2, 3])
    # 动态形状,改变的时候,不能改变元素的总个数
    # c_p_r2 = tf.reshape(c_p, [3, 1])
    print("动态形状的结果:\n", c_p_r)
    # print("动态形状的结果2:\n", c_p_r2)
    return None


变量

  • 变量是一种特殊的张量,用来保存需要更新的参数,需要指定初始化值进行初始化
  • 创建
    • tf.Variable(initial_value=None, name= None, trainable=True):创建一个带值initial_value的新变量
    • assign(value):为变量分配一个新值,返回新值
    • eval(sesson=None):计算并返回此变量的值
  • 初始化
    • tf.global_variables_initializer():添加一个初始化所有变量的op,在会话中开启
  • 示例代码:
def variable_demo():
    """
    变量的演示
    :return:
    """
    # 定义变量
    a = tf.Variable(initial_value=30)
    b = tf.Variable(initial_value=40)
    sum = tf.add(a, b)

    # 初始化变量
    init = tf.global_variables_initializer()

    # 开启会话
    with tf.Session() as sess:
        # 变量初始化
        sess.run(init)
        print("sum:\n", sess.run(sum))

    return None

tensorboard

  • 可视化查看tensor的flow过程
  • 使用步骤

    • 数据序列化
    • 写入事件到指定目录
    • 开启
  • 示例代码:

def tensorboard_demo():
    """
    TensorBoard可视化演示
    :return:
    """
    # 定义变量
    a = tf.Variable(initial_value=30, name="a")
    b = tf.Variable(initial_value=40, name="b")
    sum = tf.add(a, b, name="sum")

    # 初始化变量
    init = tf.global_variables_initializer()

    # 开启会话
    with tf.Session() as sess:
        # 变量初始化
        sess.run(init)
        print("sum:\n", sess.run(sum))
        tf.summary.FileWriter(logdir="./tmp/summary", graph=sess.graph)
    return None

在终端输入:
tensorboard    --logdir=“/tmp/tensorflow/summary/test/”

在浏览器:
127.0.0.1:6006

线性回归实例

  • 代码:
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'



def linear_regression1():
    """
    自实现一个线性回归
    :return:
    """
    # 1、准备好训练集:造一个真实数据
    # 100样本 x_true (100, 1)
    # y_true = 0.7*x_true + 0.8
    # x_true = tf.Variable(tf.random_normal(shape=[100, 1], mean=2, stddev=3))
    # tf.constant传参 value或者list
    # x_true = tf.constant(tf.random_normal(shape=[100, 1], mean=2, stddev=3))
    x_true = tf.random_normal(shape=[100, 1], mean=2, stddev=3)
    # (100, 1) * (1, 1) = (100, 1)
    y_true = tf.matmul(x_true, [[0.7]]) + 0.8

    # 2、构造模型
    # 定义权重值和偏置值
    weights = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]))
    # 变量的trainable参数如果为False,就不能被更新迭代
    # weights = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]), trainable=False)
    bias = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]))
    # (100, 1) * (1, 1)
    y_predict = tf.matmul(x_true, weights) + bias

    # 3、构造损失函数
    # 求平均(y_predict - y_true)^2 —— 均方误差
    loss = tf.reduce_mean(tf.square(y_predict - y_true))

    # 4、梯度下降优化
    # 学习率的选择 选择合适的学习率,防止梯度爆炸
    optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)
    # optimizer = tf.train.GradientDescentOptimizer(learning_rate=5).minimize(loss)

    # 初始化全局变量
    init = tf.global_variables_initializer()

    # 开启会话
    with tf.Session() as sess:
        # 运行初始化变量op
        sess.run(init)
        # 未训练前的权重值和偏置值
        print("未训练前的权重值为%f, 偏置值为%f" % (weights.eval(), bias.eval()))

        # 循环使用优化器
        for i in range(500):
            sess.run(optimizer)
            print("第%d次训练的误差为:%f, 权重值为:%f, 偏置值为:%f" % (i+1, loss.eval(), weights.eval(), bias.eval()))

    return None


def linear_regression2():
    """
    对代码1增加功能,添加变量显示
    :return:
    """
    # 1、准备好训练集:造一个真实数据
    # 100样本 x_true (100, 1)
    # y_true = 0.7*x_true + 0.8
    # x_true = tf.Variable(tf.random_normal(shape=[100, 1], mean=2, stddev=3))
    # tf.constant传参 value或者list
    # x_true = tf.constant(tf.random_normal(shape=[100, 1], mean=2, stddev=3))
    x_true = tf.random_normal(shape=[100, 1], mean=2, stddev=3)
    # (100, 1) * (1, 1) = (100, 1)
    y_true = tf.matmul(x_true, [[0.7]]) + 0.8

    # 2、构造模型
    # 定义权重值和偏置值
    weights = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]))
    # 变量的trainable参数如果为False,就不能被更新迭代
    # weights = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]), trainable=False)
    bias = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]))
    # (100, 1) * (1, 1)
    y_predict = tf.matmul(x_true, weights) + bias

    # 3、构造损失函数
    # 求平均(y_predict - y_true)^2 —— 均方误差
    loss = tf.reduce_mean(tf.square(y_predict - y_true))

    # 4、梯度下降优化
    # 学习率的选择 选择合适的学习率,防止梯度爆炸
    optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)
    # optimizer = tf.train.GradientDescentOptimizer(learning_rate=5).minimize(loss)

    # 2)收集变量
    tf.summary.scalar("error", loss)
    tf.summary.histogram("weights", weights)
    tf.summary.histogram("bias", bias)

    # 3)合并收集到的变量
    merged = tf.summary.merge_all()

    # 初始化全局变量
    init = tf.global_variables_initializer()

    # 开启会话
    with tf.Session() as sess:
        # 运行初始化变量op
        sess.run(init)
        # 未训练前的权重值和偏置值
        print("未训练前的权重值为%f, 偏置值为%f" % (weights.eval(), bias.eval()))

        # 1)实例化事件文件对象
        file_writer = tf.summary.FileWriter(logdir="./linear_model/summary", graph=sess.graph)

        # 循环使用优化器
        for i in range(500):
            sess.run(optimizer)
            print("第%d次训练的误差为:%f, 权重值为:%f, 偏置值为:%f" % (i+1, loss.eval(), weights.eval(), bias.eval()))
            # 4)运行合并收集变量op
            if i % 10 == 0:
                summary = sess.run(merged)
                file_writer.add_summary(summary, i)

    return None

def linear_regression3():
    """
    对代码2增加功能,添加作用域
    :return:
    """

    with tf.variable_scope("prepare_data"):
        # 1、准备好训练集:造一个真实数据
        # 100样本 x_true (100, 1)
        # y_true = 0.7*x_true + 0.8
        # x_true = tf.Variable(tf.random_normal(shape=[100, 1], mean=2, stddev=3))
        # tf.constant传参 value或者list
        # x_true = tf.constant(tf.random_normal(shape=[100, 1], mean=2, stddev=3))
        x_true = tf.random_normal(shape=[100, 1], mean=2, stddev=3, name="x_data")
        # (100, 1) * (1, 1) = (100, 1)
        y_true = tf.matmul(x_true, [[0.7]]) + 0.8

    with tf.variable_scope("create_model"):
        # 2、构造模型
        # 定义权重值和偏置值
        weights = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]), name="w")
        # 变量的trainable参数如果为False,就不能被更新迭代
        # weights = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]), trainable=False)
        bias = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]), name="b")
        # (100, 1) * (1, 1)
        y_predict = tf.matmul(x_true, weights) + bias


    with tf.variable_scope("loss"):
        # 3、构造损失函数
        # 求平均(y_predict - y_true)^2 —— 均方误差
        loss = tf.reduce_mean(tf.square(y_predict - y_true))

    with tf.variable_scope("gd_optimizer"):
        # 4、梯度下降优化
        # 学习率的选择 选择合适的学习率,防止梯度爆炸
        optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)
        # optimizer = tf.train.GradientDescentOptimizer(learning_rate=5).minimize(loss)

    # 2)收集变量
    tf.summary.scalar("error", loss)
    tf.summary.histogram("weights", weights)
    tf.summary.histogram("bias", bias)

    # 3)合并收集到的变量
    merged = tf.summary.merge_all()

    # 初始化全局变量
    init = tf.global_variables_initializer()

    # 开启会话
    with tf.Session() as sess:
        # 运行初始化变量op
        sess.run(init)
        # 未训练前的权重值和偏置值
        print("未训练前的权重值为%f, 偏置值为%f" % (weights.eval(), bias.eval()))

        # 1)实例化事件文件对象
        file_writer = tf.summary.FileWriter(logdir="./linear_model/summary", graph=sess.graph)

        # 循环使用优化器
        for i in range(500):
            sess.run(optimizer)
            print("第%d次训练的误差为:%f, 权重值为:%f, 偏置值为:%f" % (i+1, loss.eval(), weights.eval(), bias.eval()))
            # 4)运行合并收集变量op
            if i % 10 == 0:
                summary = sess.run(merged)
                file_writer.add_summary(summary, i)

    return None



def linear_regression4():
    """
    对代码3增加功能,添加模型保存和加载
    :return:
    """

    with tf.variable_scope("prepare_data"):
        # 1、准备好训练集:造一个真实数据
        # 100样本 x_true (100, 1)
        # y_true = 0.7*x_true + 0.8
        # x_true = tf.Variable(tf.random_normal(shape=[100, 1], mean=2, stddev=3))
        # tf.constant传参 value或者list
        # x_true = tf.constant(tf.random_normal(shape=[100, 1], mean=2, stddev=3))
        x_true = tf.random_normal(shape=[100, 1], mean=2, stddev=3, name="x_data")
        # (100, 1) * (1, 1) = (100, 1)
        y_true = tf.matmul(x_true, [[0.7]]) + 0.8

    with tf.variable_scope("create_model"):
        # 2、构造模型
        # 定义权重值和偏置值
        weights = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]), name="w")
        # 变量的trainable参数如果为False,就不能被更新迭代
        # weights = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]), trainable=False)
        bias = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]), name="b")
        # (100, 1) * (1, 1)
        y_predict = tf.matmul(x_true, weights) + bias


    with tf.variable_scope("loss"):
        # 3、构造损失函数
        # 求平均(y_predict - y_true)^2 —— 均方误差
        loss = tf.reduce_mean(tf.square(y_predict - y_true))

    with tf.variable_scope("gd_optimizer"):
        # 4、梯度下降优化
        # 学习率的选择 选择合适的学习率,防止梯度爆炸
        optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)
        # optimizer = tf.train.GradientDescentOptimizer(learning_rate=5).minimize(loss)

    # 2)收集变量
    tf.summary.scalar("error", loss)
    tf.summary.histogram("weights", weights)
    tf.summary.histogram("bias", bias)

    # 3)合并收集到的变量
    merged = tf.summary.merge_all()

    # 初始化全局变量
    init = tf.global_variables_initializer()

    # 实例化一个Saver对象
    saver = tf.train.Saver()

    # 开启会话
    with tf.Session() as sess:
        # 运行初始化变量op
        sess.run(init)
        # 未训练前的权重值和偏置值
        print("未训练前的权重值为%f, 偏置值为%f" % (weights.eval(), bias.eval()))

        # 1)实例化事件文件对象
        file_writer = tf.summary.FileWriter(logdir="./linear_model/summary", graph=sess.graph)

        # 加载模型
        if os.path.exists("./linear_model/linear_regression/checkpoint"):
            saver.restore(sess, "./linear_model/linear_regression/my_model")

        # 循环使用优化器
        for i in range(500):
            sess.run(optimizer)
            print("第%d次训练的误差为:%f, 权重值为:%f, 偏置值为:%f" % (i+1, loss.eval(), weights.eval(), bias.eval()))
            # 4)运行合并收集变量op
            summary = sess.run(merged)
            file_writer.add_summary(summary, i)
            if i % 10 == 0:
                # 保存模型
                saver.save(sess, "./linear_model/linear_regression/my_model")

    return None

tf.app.flags.DEFINE_string("model_path", "./linear_model/linear_regression/my_model", "模型地址")
tf.app.flags.DEFINE_string("name", "abc", "名字")

FLAGS = tf.app.flags.FLAGS

def linear_regression5():
    """
    对代码4增加功能,添加自定义命令行参数
    :return:
    """

    with tf.variable_scope("prepare_data"):
        # 1、准备好训练集:造一个真实数据
        # 100样本 x_true (100, 1)
        # y_true = 0.7*x_true + 0.8
        # x_true = tf.Variable(tf.random_normal(shape=[100, 1], mean=2, stddev=3))
        # tf.constant传参 value或者list
        # x_true = tf.constant(tf.random_normal(shape=[100, 1], mean=2, stddev=3))
        x_true = tf.random_normal(shape=[100, 1], mean=2, stddev=3, name="x_data")
        # (100, 1) * (1, 1) = (100, 1)
        y_true = tf.matmul(x_true, [[0.7]]) + 0.8

    with tf.variable_scope("create_model"):
        # 2、构造模型
        # 定义权重值和偏置值
        weights = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]), name="w")
        # 变量的trainable参数如果为False,就不能被更新迭代
        # weights = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]), trainable=False)
        bias = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]), name="b")
        # (100, 1) * (1, 1)
        y_predict = tf.matmul(x_true, weights) + bias


    with tf.variable_scope("loss"):
        # 3、构造损失函数
        # 求平均(y_predict - y_true)^2 —— 均方误差
        loss = tf.reduce_mean(tf.square(y_predict - y_true))

    with tf.variable_scope("gd_optimizer"):
        # 4、梯度下降优化
        # 学习率的选择 选择合适的学习率,防止梯度爆炸
        optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)
        # optimizer = tf.train.GradientDescentOptimizer(learning_rate=5).minimize(loss)

    # 2)收集变量
    tf.summary.scalar("error", loss)
    tf.summary.histogram("weights", weights)
    tf.summary.histogram("bias", bias)

    # 3)合并收集到的变量
    merged = tf.summary.merge_all()

    # 初始化全局变量
    init = tf.global_variables_initializer()

    # 实例化一个Saver对象
    saver = tf.train.Saver()

    # 开启会话
    with tf.Session() as sess:
        # 运行初始化变量op
        sess.run(init)
        # 未训练前的权重值和偏置值
        print("未训练前的权重值为%f, 偏置值为%f" % (weights.eval(), bias.eval()))

        # 1)实例化事件文件对象
        file_writer = tf.summary.FileWriter(logdir="./linear_model/summary", graph=sess.graph)

        # 加载模型
        if os.path.exists("./linear_model/linear_regression"):
            saver.restore(sess, FLAGS.model_path)

        # 循环使用优化器
        for i in range(500):
            sess.run(optimizer)
            print("第%d次训练的误差为:%f, 权重值为:%f, 偏置值为:%f" % (i+1, loss.eval(), weights.eval(), bias.eval()))
            # 4)运行合并收集变量op
            summary = sess.run(merged)
            file_writer.add_summary(summary, i)
            if i % 10 == 0:
                # 保存模型
                saver.save(sess, FLAGS.model_path)

    return None

def main(argv):
    print("argv:\n", argv)

    print("自定义命令行参数model_path:\n", FLAGS.model_path)
    print("name:\n", FLAGS.name)
    return None


if __name__ == "__main__":
    # 代码1:自实现一个线性回归
    # linear_regression1()
    # 代码2:对代码1增加功能,添加变量显示
    # linear_regression2()
    # 代码3:对代码2增加功能,添加作用域
    # linear_regression3()
    # 代码4:对代码3增加功能,添加模型保存和加载
    # linear_regression4()
    # 代码5:对代码4增加功能,添加自定义命令行参数
    # linear_regression5()
    tf.app.run()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值