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 Opencv将图片转为字符画
Feb 19 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
Dec 14 Python
Python lambda表达式用法实例分析
Dec 25 Python
Python实现的大数据分析操作系统日志功能示例
Feb 11 Python
Django获取应用下的所有models的例子
Aug 30 Python
django drf框架自带的路由及最简化的视图
Sep 10 Python
wxPython实现列表增删改查功能
Nov 19 Python
python中逻辑与或(and、or)和按位与或异或(&、|、^)区别
Aug 05 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
Nov 28 Python
Python tkinter之Bind(绑定事件)的使用示例
Feb 05 Python
python实现局部图像放大
Nov 17 Python
Python开发五子棋小游戏
May 02 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
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
递归列出所有文件和目录
2006/10/09 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
js客户端快捷键管理类的较完整实现和应用
2010/06/08 Javascript
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
jquery精度计算代码 jquery指定精确小数位
2017/02/06 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
vue仿element实现分页器效果
2018/09/13 Javascript
详解vue开发中调用微信jssdk的问题
2019/04/16 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
2020/01/03 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
实例详解Python装饰器与闭包
2019/07/29 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
python数据爬下来保存的位置
2020/02/17 Python
parser.add_argument中的action使用
2020/04/20 Python
Python中使用filter过滤列表的一个小技巧分享
2020/05/02 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
没编程基础可以学python吗
2020/06/17 Python
python3.7添加dlib模块的方法
2020/07/01 Python
意大利在线大学图书馆:Libreria universitaria
2019/07/16 全球购物
Android面试宝典
2013/08/06 面试题
爱护花草树木的标语
2014/06/11 职场文书
小学运动会开幕词
2016/03/04 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers
Python 统计序列中元素的出现频度
2022/04/26 Python