tensorflow 就该这么学--2
1、模型机制
tensor 代表数据,可以理解为多维数组
variable 代表变量,模型中表示定义的参数,是通过不断训练得到的值
placeholder 代表占位符,也可以理解为定义函数的参数
2、session 的两种使用方法(还有一种启动session的方式是sess = tf.InteractiveSession())
3、注入机制
4、指定gpu运算
5、保存模型与载入模型
示例完整代码如下可直接运行:
- import tensorflow as tf
- import numpy as np
- plotdata = { "batchsize":[], "loss":[] }
- #生成模拟数据
- train_X = np.linspace(-1, 1, 100)
- train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.3 # y=2x,但是加入了噪声
- tf.reset_default_graph() #注意需要添加一个重置图
- # 创建模型
- # 占位符
- X = tf.placeholder("float")
- Y = tf.placeholder("float")
- # 模型参数
- W = tf.Variable(tf.random_normal([1]), name="weight")
- b = tf.Variable(tf.zeros([1]), name="bias")
- # 前向结构
- z = tf.multiply(X, W)+ b
- #反向优化
- cost =tf.reduce_mean( tf.square(Y - z))
- learning_rate = 0.01
- optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #Gradient descent
- # 初始化变量
- init = tf.global_variables_initializer()
- # 训练参数
- training_epochs = 20
- display_step = 2
- saver = tf.train.Saver()
- savedir = './'
- # 启动session
- with tf.Session() as sess:
- sess.run(init)
- # Fit all training data
- for epoch in range(training_epochs):
- for (x, y) in zip(train_X, train_Y):
- sess.run(optimizer, feed_dict={X: x, Y: y})
- #显示训练中的详细信息
- if epoch % display_step == 0:
- loss = sess.run(cost, feed_dict={X: train_X, Y:train_Y})
- print ("Epoch:", epoch+1, "cost=", loss,"W=", sess.run(W), "b=", sess.run(b))
- if not (loss == "NA" ):
- plotdata["batchsize"].append(epoch)
- plotdata["loss"].append(loss)
- print (" Finished!")
- saver.save(sess,savedir+'linemodel.cpkt') #模型保存
- print ("cost=", sess.run(cost, feed_dict={X: train_X, Y: train_Y}), "W=", sess.run(W), "b=", sess.run(b))
- #模型载入
- with tf.Session() as sess2:
- sess2.run(tf.global_variables_initializer())
- saver.restore(sess2,savedir+'linemodel.cpkt')
- print('x=0.1,z=',sess2.run(z,feed_dict={X:0.1}))
6、检查点,训练模型有时候会出现中断情况,可以将检查点保存起来
saver一个参数max_to_keep=1表明最多只保存一个检查点文件
载入时指定迭代次数load_epoch
完整代码如下:
- import tensorflow as tf
- import numpy as np
- plotdata = { "batchsize":[], "loss":[] }
- #生成模拟数据
- train_X = np.linspace(-1, 1, 100)
- train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.3 # y=2x,但是加入了噪声
- tf.reset_default_graph() #注意需要添加一个重置图
- # 创建模型
- # 占位符
- X = tf.placeholder("float")
- Y = tf.placeholder("float")
- # 模型参数
- W = tf.Variable(tf.random_normal([1]), name="weight")
- b = tf.Variable(tf.zeros([1]), name="bias")
- # 前向结构
- z = tf.multiply(X, W)+ b
- #反向优化
- cost =tf.reduce_mean( tf.square(Y - z))
- learning_rate = 0.01
- optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #Gradient descent
- # 初始化变量
- init = tf.global_variables_initializer()
- # 训练参数
- training_epochs = 20
- display_step = 2
- saver = tf.train.Saver(max_to_keep=1) #表明最多只保存一个检查点文件
- savedir = './'
- # 启动session
- with tf.Session() as sess:
- sess.run(init)
- # Fit all training data
- for epoch in range(training_epochs):
- for (x, y) in zip(train_X, train_Y):
- sess.run(optimizer, feed_dict={X: x, Y: y})
- #显示训练中的详细信息
- if epoch % display_step == 0:
- loss = sess.run(cost, feed_dict={X: train_X, Y:train_Y})
- print ("Epoch:", epoch+1, "cost=", loss,"W=", sess.run(W), "b=", sess.run(b))
- if not (loss == "NA" ):
- plotdata["batchsize"].append(epoch)
- plotdata["loss"].append(loss)
- saver.save(sess,savedir+'linemodel.cpkt',global_step=epoch)
- print (" Finished!")
- # saver.save(sess,savedir+'linemodel.cpkt') #模型保存
- print ("cost=", sess.run(cost, feed_dict={X: train_X, Y: train_Y}), "W=", sess.run(W), "b=", sess.run(b))
- #检查点载入
- with tf.Session() as sess2:
- load_epoch = 18
- sess2.run(tf.global_variables_initializer())
- saver.restore(sess2,savedir+'linemodel.cpkt-'+str(load_epoch))
- 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.., 代码后面有注释,这个不理解可以当作模版,这几句代码,放在不同代码相应位置即可
代码如下:
- import tensorflow as tf
- import numpy as np
- plotdata = { "batchsize":[], "loss":[] }
- #生成模拟数据
- train_X = np.linspace(-1, 1, 100)
- train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.3 # y=2x,但是加入了噪声
- tf.reset_default_graph() #注意需要添加一个重置图
- # 创建模型
- # 占位符
- X = tf.placeholder("float")
- Y = tf.placeholder("float")
- # 模型参数
- W = tf.Variable(tf.random_normal([1]), name="weight")
- b = tf.Variable(tf.zeros([1]), name="bias")
- # 前向结构
- z = tf.multiply(X, W)+ b
- tf.summary.histogram('z',z)#将预测值以直方图显示
- #反向优化
- cost =tf.reduce_mean( tf.square(Y - z))
- tf.summary.scalar('loss_function', cost)#将损失以标量显示
- learning_rate = 0.01
- optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #Gradient descent
- # 初始化变量
- init = tf.global_variables_initializer()
- # 训练参数
- training_epochs = 20
- display_step = 2
- # 启动session
- with tf.Session() as sess:
- sess.run(init)
- merged_summary_op = tf.summary.merge_all() # 合并所有summary
- # 创建summary_writer,用于写文件
- summary_writer = tf.summary.FileWriter('log/summaries', sess.graph)
- # Fit all training data
- for epoch in range(training_epochs):
- for (x, y) in zip(train_X, train_Y):
- sess.run(optimizer, feed_dict={X: x, Y: y})
- summary_str = sess.run(merged_summary_op, feed_dict={X: x, Y: y});
- summary_writer.add_summary(summary_str, epoch); # 将summary 写入文件
- #显示训练中的详细信息
- if epoch % display_step == 0:
- loss = sess.run(cost, feed_dict={X: train_X, Y:train_Y})
- print ("Epoch:", epoch+1, "cost=", loss,"W=", sess.run(W), "b=", sess.run(b))
- if not (loss == "NA" ):
- plotdata["batchsize"].append(epoch)
- plotdata["loss"].append(loss)
- print (" Finished!")
- 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)
tensorflow 就该这么学--2相关推荐
- tensorflow 就该这么学--1
深度学习主要有下面几个步骤: 1.获取数据 2.搭建模型 3.模型训练 4.使用模型解决实际问题 tensorflow是现在最火的深度学习框架,值得学习 简单的用tensorflow拟合二维数据 1. ...
- tensorflow和python先学哪个-前辈说先学会了这些Python知识点,再谈学习人工智能!...
原标题:前辈说先学会了这些Python知识点,再谈学习人工智能! 首先我们看一看Python的优势: 开源,跨平台. 社区.不要小看这一点.社区意味着有很多教程.书籍,出了问题很容易google到,乃 ...
- tensorflow就该这么学--6(多层神经网络)
一.线性问题和非线性问题 1.线性问题 某医院想用神经网络对已经有的病例进行分类,数据样本特征x包括病人的年龄x1和肿瘤的大小x2,(x[x1,x2]),对应的标签为良性或恶性(0.1) 二分类: ( ...
- tensorflow就该这么学--5( 神经网络基础)
一.单个神经元 单个神经元输出时 y=w*x+b 1 .正向传播:输入数据,通过初始给定的参数w,b 计算出对应的函数值 2.反向传播:计算正向传播得到的函数值与真实标签之间的误差值,之后调整w,b ...
- tensorflow就该这么学--4(识别手写数字)
- tensorflow就该这么学--3
一.张量及操作 1.张量介绍 (1)tensor类型 DT_FLOAT.DT_DOUBLE.DT_INT64.DT_INT32.DT_INT16.DT_INT8.DT_STRING.DT_BOOL ( ...
- TensorFlow王位不保?ICLR投稿论文PyTorch出镜率快要反超了
自PyTorch出道以来,不断有人表示,发现了这样的趋势: "学术圈正在慢慢地抛弃TensorFlow,转投PyTorch." 如今,PyTorch 1.0发布,ICLR 2019 ...
- 用 Go 语言理解 Tensorflow
原文:https://pgaleone.eu/tensorflow/go/2017/05/29/understanding-tensorflow-using-go/ Tensorflow 并不是一个严 ...
- Tensorflow神经网络框架 小例子 三层神经网络 卷积神经网络 循环神经网络 神经网络可视化
Tensorflow神经网络框架 以前我们讲了神经网络基础,但是如果从头开始实现,那将是一个庞大且费时的工作,所以我们选择一条捷径---神经网络框架.我理解的神经网络框架就相当于一个工具包.就比如我们 ...
最新文章
- PTA数据结构与算法题目集(中文)7-25
- Andrew Ng 深度学习课后测试记录-01-week2-答案
- jquery 加法 乘法运算 精确计算函数
- linux上配置spark集群
- an导入html5,H5-FLASH:AN HTML5-BASED FLASH RUNTIME
- P3250 [HNOI2016]网络(整体二分)
- P4983-忘情【wqs二分,斜率优化】
- DecExpress 帮助网站
- 『TensorFlow』模型保存和载入方法汇总
- mac安装和使用boost库
- python编程(mysql操作)
- 单片机can通信可以接多少个设备_总结BMS上CAN收发器电路的几个要点
- C++动态内存管理好难怎么办?零基础图文讲解,小白轻松理解原理
- 笛卡尔树(知识总结+板子整理)
- VBA用CDO批量发送邮件
- 【问】前台销售时卡顿
- 软考报名资格审核要多久?证明材料要哪些?
- 员工激励:什么样的方法最合适?
- 初始化string对象时,申请空间的秘密
- Outlook 转发/回复邮件时如何不显示邮件地址而只显示联系人名字?