速成教程:TensorFlow如何实现简单的模型训练

1、二话不说,直接上代码:TensorFlow实现简单线性回归训练模型

import tensorflow as tf
import os

os.environ['TF_CPP_MIN_LOG_LEVEL']='2'

tf.app.flags.DEFINE_integer("max_step", 200, "训练模型的步数")          # 训练步数
tf.app.flags.DEFINE_string("model_path",
                           "./ckpt/linearregression",
                           "模型保存的路径+模型名字")                    # 定义模型的路径
FLAGS = tf.app.flags.FLAGS                                           # 定义获取命令行参数


def linear_regression():
    with tf.variable_scope("dataset"):                               # 设置变量的命名空间
        X = tf.random_normal(shape=(100,1), mean=0.5, stddev=1)
        Y_true = tf.matmul(X, [[4.0]]) + 3.0
    # 建立线性模型
    with tf.variable_scope("linear_model"):
        weights = tf.Variable(initial_value=tf.random_normal(shape=(1,1)), name="weights")
        bias = tf.Variable(initial_value=tf.random_normal(shape=(1,1)), name="bias")
        Y_predict = tf.matmul(X, weights) + bias
    with tf.variable_scope("loss"):
        loss = tf.reduce_mean(tf.square(Y_predict-Y_true), name="loss")
    with tf.variable_scope("gradient_optimiter"):
        optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)
    # 收集变量
    tf.summary.scalar("loss",loss)
    tf.summary.histogram("weight",weights)
    tf.summary.histogram("bias",bias)
    # 合并变量
    merge = tf.summary.merge_all()
    # 初始化所有变量
    init = tf.global_variables_initializer()

    # 创建一个模型 保存与加载 实例saver
    saver = tf.train.Saver()
    with tf.Session() as sess:
        sess.run(init)  # 给变量赋值初始值
        print("初始化的权重为%f,偏置为%f" % (weights.eval(), bias.eval()))
        # 模型加载
        # saver.restore(sess, "./ckpt/linearregression")
        print("权重为%f,偏置为%f" % (weights.eval(), bias.eval()))
        # 创建事件文件,用于Tensorboard展示训练模型的全过程
        file_writer = tf.summary.FileWriter(logdir="./summary/",graph=sess.graph)
        # 训练模型
        for i in range(FLAGS.max_step):
            sess.run(optimizer)
            print("第%d步的损失为%f,权重为%f, 偏置为%f" % (i+1, loss.eval(), weights.eval(), bias.eval()))
            # 将收集并合并的变量添加到事件文件,以便在Tensorboard上展示
            summary = sess.run(merge)
            file_writer.add_summary(summary,i+1)
        # 模型保存
        saver.save(sess, FLAGS.model_path)

    return None


def main(argv):
    print("这是main函数")
    print(argv)
    print(FLAGS.model_path)
    linear_regression()

if __name__ == "__main__":
    tf.app.run()                  # 通过tf.app.run()启动main(argv)函数

2、cmd命令行执行该文件TensorFlow实现线性回归.py

cmd命令行可以给max_stepmodel_path重新赋值

E:\Tensorflow>workon ai            # 必须切换到虚拟环境中
(ai) E:\Tensorflow>python ./09-TensorFlow实现线性回归.py --max_step=100

===cmd执行结果:===========================================

这是main函数
['./TensorFlow实现线性回归.py']
./ckpt/linearregression
初始化的权重为-0.996474,偏置为1.092397
权重为-0.996474,偏置为1.092397
第1步的损失为38.175697,权重为-0.828843, 偏置为1.183127
第2步的损失为38.077343,权重为-0.671796, 偏置为1.268724
第3步的损失为42.033585,权重为-0.526859, 偏置为1.366900
...
第98步的损失为0.180080,权重为3.587485, 偏置为3.236459
第99步的损失为0.224762,权重为3.594254, 偏置为3.237265
第100步的损失为0.146797,权重为3.602060, 偏置为3.237001

3、Tensorboard 查看模型训练过程和结果

(1)cmd命令行输入以下命令

tensorboard --logdir=" E:\Tensorflow\summary" --host=127.0.0.1

(2)然后使用谷歌浏览器访问http://127.0.0.1:6006查看模型训练过程和结果(max_step=200)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、面向对象思想下,TensorFlow实现线性回归案例代码

import tensorflow as tf
import os

os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
tf.app.flags.DEFINE_integer("max_step", 100, "训练模型的步数")
tf.app.flags.DEFINE_string("model_path", "./ckpt/linearregression", "模型保存的路径+模型名字")
FLAGS = tf.app.flags.FLAGS


class LinearRegression(object):
    def __init__(self):
        pass

    def dataset(self):
        x = tf.random_normal([100,1], mean=0.5, stddev=2, name="x")
        y = tf.matmul(x, [[4.0]]) + 3.0
        return x, y

    def model(self, feature):
        with tf.variable_scope("linea_model"):
            self.weight = tf.Variable(tf.random_normal([1, 1], mean=0.0, stddev=1.0), name="weights")
            self.bias = tf.Variable(0.0, name='biases')
            y_predict = tf.matmul(feature, self.weight) + self.bias
        return y_predict

    def loss(self, y_true, y_predict):
        loss = tf.reduce_mean(tf.square(y_true - y_predict))
        return loss

    def optimizer_op(self, loss):
        optimizer = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
        return optimizer

    def merge_summary(self, loss):
        tf.summary.scalar("losses", loss)
        tf.summary.histogram("w", self.weight)
        tf.summary.histogram('b', self.bias)
        merged = tf.summary.merge_all()
        return merged

    def train(self):
        g = tf.get_default_graph()
        with g.as_default():
            x, y = self.dataset()
            y_predict = self.model(x)
            loss = self.loss(y, y_predict)
            optimizer = self.optimizer_op(loss)
            merged = self.merge_summary(loss)
            saver = tf.train.Saver()
            with tf.Session() as sess:
                sess.run(tf.global_variables_initializer())
                print("初始化的权重:%f, 偏置:%f" % (self.weight.eval(), self.bias.eval()))
                # saver.restore(sess, "./ckpt/linearregression")
                print("权重:%f, 偏置:%f" % (self.weight.eval(), self.bias.eval()))
                for i in range(FLAGS.max_step):
                    sess.run(optimizer)
                    file_writer = tf.summary.FileWriter("./summary/", graph=sess.graph)
                    print("训练第%d步之后的损失:%f, 权重:%f, 偏置:%f" % (i, loss.eval(), self.weight.eval(), self.bias.eval()))
                    summary = sess.run(merged)
                    file_writer.add_summary(summary, i)
                saver.save(sess, FLAGS.model_path)


if __name__ == '__main__':
    lr = LinearRegression()
    lr.train()
  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
《电子工程师自学速成:提高篇》是一本针对电子工程师的自学提高资料,旨在帮助电子工程师通过自学提升自己的技能水平和知识深度。 首先,这本书适合已经具备了一定电子工程基础知识的工程师。它通过系统地介绍了电子工程师日常工作所需的各种专业知识和技能,如嵌入式系统设计、电路设计与分析、电子元器件选型与应用等。 其次,这本书采用了实际案例和具体应用场景进行讲解,帮助工程师更好地理解理论知识的实际应用。通过理论与实践的紧密结合,读者可以更加深入地了解各种电子设备的工作原理和设计思路,进一步提高自己的实际应用能力。 此外,这本书还包含了大量的实践性项目和实验,可以帮助读者巩固所学知识,并通过实际操作提高自己的动手能力。这些项目和实验都经过精心设计,力求符合实际应用场景和需求,读者在完成项目和实验的过程中能够真实地感受到电子工程的魅力和挑战。 最后,这本书还提供了一些学习方法和技巧,帮助读者更加高效地进行自学。这些方法和技巧包括如何制定学习计划、如何高效学习文献和资料、如何解决学习中遇到的问题等。这些内容不仅有助于读者在学习电子工程知识的过程中取得更好的效果,还可以帮助他们养成良好的学习习惯和科学的思维方式。 综上所述,《电子工程师自学速成:提高篇》是一本全面、系统、实践性强的电子工程师自学资料。通过学习这本书,电子工程师可以提高自己的专业技能和知识水平,成为一个更加出色的工程师。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值