浅谈keras中Dropout在预测过程中是否仍要起作用


Posted in Python onJuly 09, 2020

因为需要,要重写训练好的keras模型,虽然只具备预测功能,但是发现还是有很多坑要趟过。其中Dropout这个坑,我记忆犹新。

一开始,我以为预测时要保持和训练时完全一样的网络结构,也就是预测时用的网络也是有丢弃的网络节点,但是这样想就掉进了一个大坑!因为无法通过已经训练好的模型,来获取其训练时随机丢弃的网络节点是那些,这本身就根本不可能。

更重要的是:我发现每一个迭代周期丢弃的神经元也不完全一样。

假若迭代500次,网络共有1000个神经元, 在第n(1<= n <500)个迭代周期内,从1000个神经元里随机丢弃了200个神经元,在n+1个迭代周期内,会在这1000个神经元里(不是在剩余得800个)重新随机丢弃200个神经元。

训练过程中,使用Dropout,其实就是对部分权重和偏置在某次迭代训练过程中,不参与计算和更新而已,并不是不再使用这些权重和偏置了(预测时,会使用全部的神经元,包括使用训练时丢弃的神经元)。

也就是说在预测过程中完全没有Dropout什么事了,他只是在训练时有用,特别是针对训练集比较小时防止过拟合非常有用。

补充知识:TensorFlow直接使用ckpt模型predict不用restore

我就废话不多说了,大家还是直接看代码吧~

# -*- coding: utf-8 -*-
# from util import *
import cv2
import numpy as np
import tensorflow as tf
# from tensorflow.python.framework import graph_util
import os

os.environ['CUDA_DEVICE_ORDER'] = 'PCI_BUS_ID'
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
image_path = './8760.pgm'

input_checkpoint = './model/xu_spatial_model_1340.ckpt'

sess = tf.Session()
saver = tf.train.import_meta_graph(input_checkpoint + '.meta')
saver.restore(sess, input_checkpoint)

# input:0作为输入图像,keep_prob:0作为dropout的参数,测试时值为1,is_training:0训练参数
input_image_tensor = sess.graph.get_tensor_by_name("coef_input:0")
is_training = sess.graph.get_tensor_by_name('is_training:0')
batch_size = sess.graph.get_tensor_by_name('batch_size:0')
# 定义输出的张量名称
output_tensor_name = sess.graph.get_tensor_by_name("xuNet/logits:0") # xuNet/Logits/logits
image = cv2.imread(image_path, 0)
# 读取测试图片
out = sess.run(output_tensor_name, feed_dict={input_image_tensor: np.reshape(image, (1, 512, 512, 1)),
                       is_training: False,
                       batch_size: 1})
print(out)

ckpt模型中的所有节点名称,可以这样查看

[n.name for n in tf.get_default_graph().as_graph_def().node]

以上这篇浅谈keras中Dropout在预测过程中是否仍要起作用就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pyqt4教程之实现windows窗口小示例分享
Mar 07 Python
python安装教程 Pycharm安装详细教程
May 02 Python
Python之os操作方法(详解)
Jun 15 Python
Python 逐行分割大txt文件的方法
Oct 10 Python
Python配置mysql的教程(推荐)
Oct 13 Python
python+opencv实现的简单人脸识别代码示例
Nov 14 Python
Python实现的银行系统模拟程序完整案例
Apr 12 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
May 15 Python
python中字符串数组逆序排列方法总结
Jun 23 Python
python笔记_将循环内容在一行输出的方法
Aug 08 Python
python实现的config文件读写功能示例
Sep 24 Python
python yield和Generator函数用法详解
Feb 10 Python
在keras中对单一输入图像进行预测并返回预测结果操作
Jul 09 #Python
python求解汉诺塔游戏
Jul 09 #Python
Django中Aggregation聚合的基本使用方法
Jul 09 #Python
Python  word实现读取及导出代码解析
Jul 09 #Python
推荐技术人员一款Python开源库(造数据神器)
Jul 08 #Python
实例讲解Python 迭代器与生成器
Jul 08 #Python
opencv 阈值分割的具体使用
Jul 08 #Python
You might like
php下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
php使用ICQ网关发送手机短信
2013/10/30 PHP
thinkphp四种url访问方式详解
2014/11/28 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
PHP数据对象PDO操作技巧小结
2016/09/27 PHP
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
Javascript变量作用域详解
2013/12/06 Javascript
node.js中的console.warn方法使用说明
2014/12/09 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
BootStrap tooltip提示框使用小结
2016/10/26 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
javascript实现延时显示提示框效果
2017/06/01 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
vue发送ajax请求详解
2018/10/09 Javascript
Echarts动态加载多条折线图的实现代码
2019/05/24 Javascript
python实现俄罗斯方块游戏
2020/03/25 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
2019/09/10 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
英国精品买手店:Browns Fashion
2016/09/29 全球购物
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
俄罗斯EPL钻石珠宝店:ЭПЛ
2019/10/22 全球购物
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
PHP经典面试题
2016/09/03 面试题
2013年大学生的自我鉴定
2013/10/24 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
2016自主招生校长推荐信范文
2015/03/23 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
2016年感恩节寄语
2015/12/07 职场文书
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL
mysql函数之截取字符串的实现
2022/08/14 MySQL