tensorflow 就该这么学--2

1、模型机制

tensor  代表数据,可以理解为多维数组

variable  代表变量,模型中表示定义的参数,是通过不断训练得到的值

placeholder  代表占位符,也可以理解为定义函数的参数

2、session 的两种使用方法(还有一种启动session的方式是sess = tf.InteractiveSession())


3、注入机制


4、指定gpu运算


5、保存模型与载入模型


示例完整代码如下可直接运行:

  1. import tensorflow as tf  
  2. import numpy as np  
  3.   
  4. plotdata = { "batchsize":[], "loss":[] }  
  5.   
  6. #生成模拟数据  
  7. train_X = np.linspace(-11100)  
  8. train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.3 # y=2x,但是加入了噪声  
  9.   
  10. tf.reset_default_graph()  #注意需要添加一个重置图  
  11.   
  12.   
  13. # 创建模型  
  14. # 占位符  
  15. X = tf.placeholder("float")  
  16. Y = tf.placeholder("float")  
  17. # 模型参数  
  18. W = tf.Variable(tf.random_normal([1]), name="weight")  
  19. b = tf.Variable(tf.zeros([1]), name="bias")  
  20.   
  21. # 前向结构  
  22. z = tf.multiply(X, W)+ b  
  23.   
  24. #反向优化  
  25. cost =tf.reduce_mean( tf.square(Y - z))  
  26. learning_rate = 0.01  
  27. optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #Gradient descent  
  28.   
  29. # 初始化变量  
  30. init = tf.global_variables_initializer()  
  31. # 训练参数  
  32. training_epochs = 20  
  33. display_step = 2  
  34.   
  35. saver = tf.train.Saver()  
  36. savedir = './'  
  37.   
  38. # 启动session  
  39. with tf.Session() as sess:  
  40.     sess.run(init)  
  41.   
  42.     # Fit all training data  
  43.     for epoch in range(training_epochs):  
  44.         for (x, y) in zip(train_X, train_Y):  
  45.             sess.run(optimizer, feed_dict={X: x, Y: y})  
  46.   
  47.         #显示训练中的详细信息  
  48.         if epoch % display_step == 0:  
  49.             loss = sess.run(cost, feed_dict={X: train_X, Y:train_Y})  
  50.             print ("Epoch:", epoch+1"cost=", loss,"W=", sess.run(W), "b=", sess.run(b))  
  51.             if not (loss == "NA" ):  
  52.                 plotdata["batchsize"].append(epoch)  
  53.                 plotdata["loss"].append(loss)  
  54.   
  55.     print (" Finished!")  
  56.     saver.save(sess,savedir+'linemodel.cpkt'#模型保存  
  57.     print ("cost=", sess.run(cost, feed_dict={X: train_X, Y: train_Y}), "W=", sess.run(W), "b=", sess.run(b))  
  58.   
  59. #模型载入  
  60. with tf.Session() as sess2:  
  61.     sess2.run(tf.global_variables_initializer())  
  62.     saver.restore(sess2,savedir+'linemodel.cpkt')  
  63.     print('x=0.1,z=',sess2.run(z,feed_dict={X:0.1}))  


6、检查点,训练模型有时候会出现中断情况,可以将检查点保存起来

saver一个参数max_to_keep=1表明最多只保存一个检查点文件

载入时指定迭代次数load_epoch

完整代码如下:

  1. import tensorflow as tf  
  2. import numpy as np  
  3.   
  4. plotdata = { "batchsize":[], "loss":[] }  
  5.   
  6. #生成模拟数据  
  7. train_X = np.linspace(-11100)  
  8. train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.3 # y=2x,但是加入了噪声  
  9.   
  10. tf.reset_default_graph()  #注意需要添加一个重置图  
  11.   
  12.   
  13. # 创建模型  
  14. # 占位符  
  15. X = tf.placeholder("float")  
  16. Y = tf.placeholder("float")  
  17. # 模型参数  
  18. W = tf.Variable(tf.random_normal([1]), name="weight")  
  19. b = tf.Variable(tf.zeros([1]), name="bias")  
  20.   
  21. # 前向结构  
  22. z = tf.multiply(X, W)+ b  
  23.   
  24. #反向优化  
  25. cost =tf.reduce_mean( tf.square(Y - z))  
  26. learning_rate = 0.01  
  27. optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #Gradient descent  
  28.   
  29. # 初始化变量  
  30. init = tf.global_variables_initializer()  
  31. # 训练参数  
  32. training_epochs = 20  
  33. display_step = 2  
  34.   
  35. saver = tf.train.Saver(max_to_keep=1)       #表明最多只保存一个检查点文件  
  36. savedir = './'  
  37.   
  38. # 启动session  
  39. with tf.Session() as sess:  
  40.     sess.run(init)  
  41.   
  42.     # Fit all training data  
  43.     for epoch in range(training_epochs):  
  44.         for (x, y) in zip(train_X, train_Y):  
  45.             sess.run(optimizer, feed_dict={X: x, Y: y})  
  46.   
  47.         #显示训练中的详细信息  
  48.         if epoch % display_step == 0:  
  49.             loss = sess.run(cost, feed_dict={X: train_X, Y:train_Y})  
  50.             print ("Epoch:", epoch+1"cost=", loss,"W=", sess.run(W), "b=", sess.run(b))  
  51.             if not (loss == "NA" ):  
  52.                 plotdata["batchsize"].append(epoch)  
  53.                 plotdata["loss"].append(loss)  
  54.             saver.save(sess,savedir+'linemodel.cpkt',global_step=epoch)  
  55.   
  56.     print (" Finished!")  
  57.     # saver.save(sess,savedir+'linemodel.cpkt') #模型保存  
  58.     print ("cost=", sess.run(cost, feed_dict={X: train_X, Y: train_Y}), "W=", sess.run(W), "b=", sess.run(b))  
  59.   
  60. #检查点载入  
  61. with tf.Session() as sess2:  
  62.     load_epoch =  18  
  63.     sess2.run(tf.global_variables_initializer())  
  64.     saver.restore(sess2,savedir+'linemodel.cpkt-'+str(load_epoch))  
  65.     print('x=0.1,z=',sess2.run(z,feed_dict={X:0.1}))  

模型操作常用函数

tf.train.Saver()  #创建存储器Saver

tf.train.Saver.save(sess,save_path) #保存

tf.train.Saver.restore(sess,save_path) #恢复

7、可视化tensorboard

在代码中加入模型相关操作tf.summary.., 代码后面有注释,这个不理解可以当作模版,这几句代码,放在不同代码相应位置即可

代码如下:

  1. import tensorflow as tf  
  2. import numpy as np  
  3.   
  4. plotdata = { "batchsize":[], "loss":[] }  
  5.   
  6. #生成模拟数据  
  7. train_X = np.linspace(-11100)  
  8. train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.3 # y=2x,但是加入了噪声  
  9.   
  10. tf.reset_default_graph()  #注意需要添加一个重置图  
  11.   
  12. # 创建模型  
  13. # 占位符  
  14. X = tf.placeholder("float")  
  15. Y = tf.placeholder("float")  
  16. # 模型参数  
  17. W = tf.Variable(tf.random_normal([1]), name="weight")  
  18. b = tf.Variable(tf.zeros([1]), name="bias")  
  19.   
  20. # 前向结构  
  21. z = tf.multiply(X, W)+ b  
  22. tf.summary.histogram('z',z)#将预测值以直方图显示  
  23.   
  24. #反向优化  
  25. cost =tf.reduce_mean( tf.square(Y - z))  
  26. tf.summary.scalar('loss_function', cost)#将损失以标量显示  
  27.   
  28. learning_rate = 0.01  
  29. optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #Gradient descent  
  30.   
  31. # 初始化变量  
  32. init = tf.global_variables_initializer()  
  33. # 训练参数  
  34. training_epochs = 20  
  35. display_step = 2  
  36.   
  37. # 启动session  
  38. with tf.Session() as sess:  
  39.     sess.run(init)  
  40.   
  41.     merged_summary_op = tf.summary.merge_all()  # 合并所有summary  
  42.     # 创建summary_writer,用于写文件  
  43.     summary_writer = tf.summary.FileWriter('log/summaries', sess.graph)  
  44.   
  45.     # Fit all training data  
  46.     for epoch in range(training_epochs):  
  47.         for (x, y) in zip(train_X, train_Y):  
  48.             sess.run(optimizer, feed_dict={X: x, Y: y})  
  49.   
  50.             summary_str = sess.run(merged_summary_op, feed_dict={X: x, Y: y});  
  51.             summary_writer.add_summary(summary_str, epoch);  # 将summary 写入文件  
  52.   
  53.         #显示训练中的详细信息  
  54.         if epoch % display_step == 0:  
  55.             loss = sess.run(cost, feed_dict={X: train_X, Y:train_Y})  
  56.             print ("Epoch:", epoch+1"cost=", loss,"W=", sess.run(W), "b=", sess.run(b))  
  57.             if not (loss == "NA" ):  
  58.                 plotdata["batchsize"].append(epoch)  
  59.                 plotdata["loss"].append(loss)  
  60.   
  61.     print (" Finished!")  
  62.   
  63.     print ("cost=", sess.run(cost, feed_dict={X: train_X, Y: train_Y}), "W=", sess.run(W), "b=", sess.run(b))  

之后查看tensorboard,进入summary 日志的上级路径中,输入相关命令如下图所示:


看见端口号为6006,在浏览器中输入http://127.0.0.1:6006,就会看到下面界面


window系统下相关操作一样,进入日志文件目录,然后输入tensorboard相应的命令,在打开浏览器即可看到上图(tensorboard)


展开阅读全文

没有更多推荐了,返回首页