Guest User

Untitled

a guest
Jan 22nd, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.26 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # coding: utf-8
  3.  
  4. # # 基于TensorFlow线性回归模型的学习笔记
  5. # 如果多次运行后出现异常,说明存在了一些错误的操作,可以考虑把事件文件夹(event_files)中的多次执行生成的事件给删掉,检查点(ckpt文件夹)存储的模型也可以删掉,重新开始新的训练。
  6.  
  7. # #### 源代码展示:
  8.  
  9. # In[ ]:
  10.  
  11.  
  12. import os
  13. import tensorflow as tf
  14. """
  15. 在命令行中带参执行程序的方法
  16. # 定义命令行参数
  17. # 第一个参数:名字,默认值,说明
  18. tf.app.flags.DEFINE_integer("max_step",100,"模型训练的最大次数")
  19. tf.app.flags_DEFINE_string("model_dir"," ","模型文件加载的路径")
  20. # 定义获取命令行参数指令
  21. get_flags = tf.app.flags.FLAGS
  22. # 将所有使用的相对应的参数进行替换,如:max_step->get_flags.max_step
  23. # 再使用下面指令根据输入参数执行程序:
  24. python *.py --max_step=500 --model_dir="./ckpt/model"
  25. """
  26. def myregression():
  27. """
  28. 功能:实现一个线性回归
  29. 训练参数问题:
  30. 1、学习率
  31. 2、trainable
  32. tensorboard增加变量显示:
  33. 1、权重参数
  34. 2、损失值等
  35. ·操作步骤:收集变量->合并变量写入事件文件
  36. 定义命令行参数:
  37. 1、首先定义有哪些参数需要在运行的时候指定
  38. 2、程序当中获取定义命令行参数
  39. ·说明:定义命令行参数,用于使用命令行更改相关预置参数,使用开发一般不使用该功能
  40. """
  41.  
  42. # 定义全局参数
  43. max_step = 500 # 模型训练的最大次数
  44.  
  45. # 1、准备数据,x 特征值[100,1] y 目标值[100]
  46. with tf.variable_scope("data"):
  47. x = tf.random_normal([100,1],mean=1.75,stddev=0.5,name="x_data")
  48.  
  49. # 矩阵相乘必须是二维的
  50. y_true = tf.matmul(x,[[0.7]]) + 0.8
  51.  
  52. # 2、建立线性回归模型 1个特征,一个权重,一个偏置 y = x * w + b
  53. # 随机给一个权重和偏置,让其计算损失,然后在当前状态下优化
  54. # 用变量定义的参数才能使用此功能进行调参优化
  55. # trainable —— Variable()中的参数:指定这个变量是否能跟着梯度下降进行优化
  56. with tf.variable_scope("model"):
  57. weight = tf.Variable(tf.random_normal([1,1],mean=0.0,stddev=1.0,name="w"))
  58. bias = tf.Variable(0.0,name="b")
  59. y_predict = tf.matmul(x,weight) + bias
  60.  
  61. # 3、建立损失函数,均方误差
  62. with tf.variable_scope("loss"):
  63. loss = tf.reduce_mean(tf.square(y_true - y_predict))
  64.  
  65. # 4、梯度下降优化损失 learning_rate: 0~1,2,3,5,7,10
  66. with tf.variable_scope("optimizer"):
  67. train_op = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
  68.  
  69. # 收集tensor
  70. tf.summary.scalar("losses",loss)
  71. tf.summary.histogram("weights",weight)
  72.  
  73. # 定义合并tensor的op
  74. merged = tf.summary.merge_all()
  75.  
  76. # 定义一个初始化变量的op
  77. init_op = tf.global_variables_initializer()
  78.  
  79. # 定义一个保存模型的op
  80. saver = tf.train.Saver()
  81.  
  82. # 创建会话
  83. with tf.Session() as sess:
  84. # 初始化变量
  85. sess.run(init_op)
  86.  
  87. # 打印随机最先初始化的权重和偏执
  88. print("随机初始化的参数权重为:%f,偏置为:%f" % (weight.eval(),bias.eval()))
  89.  
  90. # 建立事件文件
  91. file_writer = tf.summary.FileWriter("./event_files/",graph=sess.graph)
  92.  
  93. # 加载模型,覆盖当中随机定义的参数,从上次训练的参数结果开始
  94. if os.path.exists("./ckpt/checkpoint"):
  95. saver.restore(sess,"./ckpt/model")
  96.  
  97. # 循环训练 运行优化
  98. for i in range(max_step):
  99. sess.run(train_op)
  100. # 运行合并的tensor
  101. summary = sess.run(merged)
  102. file_writer.add_summary(summary,i)
  103. print("第%d次优化的参数权重为:%f,偏置为:%f" % (i,weight.eval(),bias.eval()))
  104. saver.save(sess,"./ckpt/model")
  105.  
  106. return None
  107.  
  108. if __name__ == "__main__":
  109. myregression()
  110.  
  111.  
  112. # ### 打开可视化流图
  113. # terminal终端输入:
  114. #
  115. # tensorboard --logdir="mylearning/day06/summary/event_files/"
  116.  
  117. # In[ ]:
Add Comment
Please, Sign In to add comment