Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # coding: utf-8
- # # 基于TensorFlow线性回归模型的学习笔记
- # 如果多次运行后出现异常,说明存在了一些错误的操作,可以考虑把事件文件夹(event_files)中的多次执行生成的事件给删掉,检查点(ckpt文件夹)存储的模型也可以删掉,重新开始新的训练。
- # #### 源代码展示:
- # In[ ]:
- import os
- import tensorflow as tf
- """
- 在命令行中带参执行程序的方法
- # 定义命令行参数
- # 第一个参数:名字,默认值,说明
- tf.app.flags.DEFINE_integer("max_step",100,"模型训练的最大次数")
- tf.app.flags_DEFINE_string("model_dir"," ","模型文件加载的路径")
- # 定义获取命令行参数指令
- get_flags = tf.app.flags.FLAGS
- # 将所有使用的相对应的参数进行替换,如:max_step->get_flags.max_step
- # 再使用下面指令根据输入参数执行程序:
- python *.py --max_step=500 --model_dir="./ckpt/model"
- """
- def myregression():
- """
- 功能:实现一个线性回归
- 训练参数问题:
- 1、学习率
- 2、trainable
- tensorboard增加变量显示:
- 1、权重参数
- 2、损失值等
- ·操作步骤:收集变量->合并变量写入事件文件
- 定义命令行参数:
- 1、首先定义有哪些参数需要在运行的时候指定
- 2、程序当中获取定义命令行参数
- ·说明:定义命令行参数,用于使用命令行更改相关预置参数,使用开发一般不使用该功能
- """
- # 定义全局参数
- max_step = 500 # 模型训练的最大次数
- # 1、准备数据,x 特征值[100,1] y 目标值[100]
- with tf.variable_scope("data"):
- x = tf.random_normal([100,1],mean=1.75,stddev=0.5,name="x_data")
- # 矩阵相乘必须是二维的
- y_true = tf.matmul(x,[[0.7]]) + 0.8
- # 2、建立线性回归模型 1个特征,一个权重,一个偏置 y = x * w + b
- # 随机给一个权重和偏置,让其计算损失,然后在当前状态下优化
- # 用变量定义的参数才能使用此功能进行调参优化
- # trainable —— Variable()中的参数:指定这个变量是否能跟着梯度下降进行优化
- with tf.variable_scope("model"):
- 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
- # 3、建立损失函数,均方误差
- with tf.variable_scope("loss"):
- loss = tf.reduce_mean(tf.square(y_true - y_predict))
- # 4、梯度下降优化损失 learning_rate: 0~1,2,3,5,7,10
- with tf.variable_scope("optimizer"):
- train_op = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
- # 收集tensor
- tf.summary.scalar("losses",loss)
- tf.summary.histogram("weights",weight)
- # 定义合并tensor的op
- merged = tf.summary.merge_all()
- # 定义一个初始化变量的op
- init_op = tf.global_variables_initializer()
- # 定义一个保存模型的op
- saver = tf.train.Saver()
- # 创建会话
- with tf.Session() as sess:
- # 初始化变量
- sess.run(init_op)
- # 打印随机最先初始化的权重和偏执
- print("随机初始化的参数权重为:%f,偏置为:%f" % (weight.eval(),bias.eval()))
- # 建立事件文件
- file_writer = tf.summary.FileWriter("./event_files/",graph=sess.graph)
- # 加载模型,覆盖当中随机定义的参数,从上次训练的参数结果开始
- if os.path.exists("./ckpt/checkpoint"):
- saver.restore(sess,"./ckpt/model")
- # 循环训练 运行优化
- for i in range(max_step):
- sess.run(train_op)
- # 运行合并的tensor
- summary = sess.run(merged)
- file_writer.add_summary(summary,i)
- print("第%d次优化的参数权重为:%f,偏置为:%f" % (i,weight.eval(),bias.eval()))
- saver.save(sess,"./ckpt/model")
- return None
- if __name__ == "__main__":
- myregression()
- # ### 打开可视化流图
- # terminal终端输入:
- #
- # tensorboard --logdir="mylearning/day06/summary/event_files/"
- # In[ ]:
Add Comment
Please, Sign In to add comment