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)


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
tensorflow2 cnn-lstm-attention是一个GitHub项目的名称,该项目是基于TensorFlow 2框架,实现了一个结合了卷积神经网络(CNN)、长短期记忆网络(LSTM)以及注意力机制(Attention)的模型。 首先,TensorFlow 2是一个深度习框架,它提供了强大的工具和库,用于构建和训练各种神经网络模型。CNN是一种用于图像处理的经典神经网络结构,它可以有效地提取图像中的特征。LSTM则是一种能够处理序列数据的循环神经网络,它具有记忆能力,可以捕捉到序列中的长期依赖关系。而Attention机制则可以在序列中自动习并加权重要的部分,从而改善模型在处理序列数据时的表现。 这个GitHub项目结合了CNN、LSTM和Attention三个模块,旨在提高模型在处理图像序列数据时的性能。具体来说,它使用CNN作为特征提取层,将输入的图像序列转化为特征序列。然后,这些特征序列被输入到LSTM中进行序列建模,以习序列中的时间依赖关系。最后,通过Attention机制,模型可以自动关注重要的特征,从而提高模型在处理序列数据时的精度和鲁棒性。 通过这个GitHub项目,用户可以习和使用TensorFlow 2框架构建CNN-LSTM-Attention模型,并在图像序列处理任务中应用。这个项目可以为用户提供一个完整的代码实现和示例数据集,以及相应的文档和说明,帮助用户理解和运用这个模型。用户可以根据自己的需求对模型进行修改和扩展,以适应不同的应用场景。 总之,tensorflow2 cnn-lstm-attention是一个在GitHub上开源的项目,它基于TensorFlow 2框架,在图像序列处理任务中结合了CNN、LSTM和Attention三个模块,旨在提高模型的性能和表现。这个项目不仅提供了代码实现和示例数据集,还为用户提供了习和应用这个模型的资料和指导,是一个有价值的资源。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值