tensorflow 固定部分参数训练,只训练部分参数的实例


Posted in Python onJanuary 20, 2020

在使用tensorflow来训练一个模型的时候,有时候需要依靠验证集来判断模型是否已经过拟合,是否需要停止训练。

1.首先想到的是用tf.placeholder()载入不同的数据来进行计算,比如

def inference(input_):
  """
  this is where you put your graph.
  the following is just an example.
  """
  
  conv1 = tf.layers.conv2d(input_)
 
  conv2 = tf.layers.conv2d(conv1)
 
  return conv2
 
 
input_ = tf.placeholder()
output = inference(input_)
...
calculate_loss_op = ...
train_op = ...
...
 
with tf.Session() as sess:
  sess.run([loss, train_op], feed_dict={input_: train_data})
 
  if validation == True:
    sess.run([loss], feed_dict={input_: validate_date})

这种方式很简单,也很直接了然。

2.但是,如果处理的数据量很大的时候,使用 tf.placeholder() 来载入数据会严重地拖慢训练的进度,因此,常用tfrecords文件来读取数据。

此时,很容易想到,将不同的值传入inference()函数中进行计算。

train_batch, label_batch = decode_train()
val_train_batch, val_label_batch = decode_validation()
 
 
train_result = inference(train_batch)
...
loss = ..
train_op = ...
...
 
if validation == True:
  val_result = inference(val_train_batch)
  val_loss = ..
  
 
with tf.Session() as sess:
  sess.run([loss, train_op])
 
  if validation == True:
    sess.run([val_result, val_loss])

这种方式看似能够直接调用inference()来对验证数据进行前向传播计算,但是,实则会在原图上添加上许多新的结点,这些结点的参数都是需要重新初始化的,也是就是说,验证的时候并不是使用训练的权重。

3.用一个tf.placeholder来控制是否训练、验证。

def inference(input_):
  ...
  ...
  ...
  
  return inference_result
 
 
train_batch, label_batch = decode_train()
val_batch, val_label = decode_validation()
 
is_training = tf.placeholder(tf.bool, shape=())
 
x = tf.cond(is_training, lambda: train_batch, lambda: val_batch)
y = tf.cond(is_training, lambda: train_label, lambda: val_label)
 
logits = inference(x)
loss = cal_loss(logits, y)
train_op = optimize(loss)
 
with tf.Session() as sess:
  
  loss, _ = sess.run([loss, train_op], feed_dict={is_training: True})
  
  if validation == True:
    loss = sess.run(loss, feed_dict={is_training: False})

使用这种方式就可以在一个大图里创建一个分支条件,从而通过控制placeholder来控制是否进行验证。

以上这篇tensorflow 固定部分参数训练,只训练部分参数的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python下线程之间的共享和释放示例
May 04 Python
Django中处理出错页面的方法
Jul 15 Python
使用python3.5仿微软记事本notepad
Jun 15 Python
Python 2与Python 3版本和编码的对比
Feb 14 Python
解决python3在anaconda下安装caffe失败的问题
Jun 15 Python
利用Python读取txt文档的方法讲解
Jun 23 Python
Python 忽略warning的输出方法
Oct 18 Python
python多线程调用exit无法退出的解决方法
Feb 18 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
Jun 29 Python
Python爬虫爬取微信朋友圈
Aug 06 Python
Python 实现PS滤镜中的径向模糊特效
Dec 03 Python
如何通过Django使用本地css/js文件
Jan 20 #Python
Python中 Global和Nonlocal的用法详解
Jan 20 #Python
Django后台管理系统的图文使用教学
Jan 20 #Python
解决Pycharm的项目目录突然消失的问题
Jan 20 #Python
Python log模块logging记录打印用法解析
Jan 20 #Python
解决tensorflow训练时内存持续增加并占满的问题
Jan 19 #Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 #Python
You might like
php读取html并截取字符串的简单代码
2009/11/30 PHP
php中数组首字符过滤功能代码
2012/07/31 PHP
PHP简单获取及判断提交来源的方法
2016/04/22 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
使用php自动备份数据库表的实现方法
2017/07/28 PHP
JS的IE和Firefox兼容性集锦
2006/12/11 Javascript
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
js 获取后台的字段 改变 checkbox的被选中的状态 代码
2013/06/05 Javascript
js中array的sort()方法使用介绍
2014/02/20 Javascript
Angularjs全局变量被作用域监听的正确姿势
2016/02/06 Javascript
JS正则表达式修饰符中multiline(/m)用法分析
2016/12/27 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
2017/03/07 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
解决node修改后需频繁手动重启的问题
2018/05/13 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
[02:03]完美世界DOTA2联赛10月30日赛事集锦
2020/10/31 DOTA
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
pygame学习笔记(5):游戏精灵
2015/04/15 Python
Python实现网站注册验证码生成类
2017/06/08 Python
Python类中self参数用法详解
2020/02/13 Python
基于python实现删除指定文件类型
2020/07/21 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
python用700行代码实现http客户端
2021/01/14 Python
英国百年闻名的优质健康产品连锁店:Holland & Barrett
2019/12/19 全球购物
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
日语专业毕业生自荐信
2013/11/11 职场文书
2014年两会学习心得体会
2014/03/10 职场文书
保研专家推荐信范文
2015/03/25 职场文书
python绘制箱型图
2021/04/27 Python
mysql如何能有效防止删库跑路
2021/10/05 MySQL
Nginx源码编译安装过程记录
2021/11/17 Servers
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL