浅谈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 相关文章推荐
python网络编程学习笔记(九):数据库客户端 DB-API
Jun 09 Python
Django框架中处理URLconf中特定的URL的方法
Jul 20 Python
python实现井字棋游戏
Mar 30 Python
Python用Bottle轻量级框架进行Web开发
Jun 08 Python
Python贪吃蛇游戏编写代码
Oct 26 Python
python爬虫使用cookie登录详解
Dec 27 Python
python numpy 按行归一化的实例
Jan 21 Python
Python 合并多个TXT文件并统计词频的实现
Aug 23 Python
Windows10+anacond+GPU+pytorch安装详细过程
Mar 24 Python
基于PyTorch的permute和reshape/view的区别介绍
Jun 18 Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 Python
虚拟环境及venv和virtualenv的区别说明
Feb 05 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
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
使用php来实现网络服务
2009/09/15 PHP
新浪SAE搭建PHP项目教程
2015/01/28 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
js实现连续英文字符自动换行兼容ie6 ie7和firefox
2013/09/06 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
Windows系统下PhantomJS的安装和基本用法
2018/10/21 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
Python 利用pydub库操作音频文件的方法
2019/01/09 Python
python用requests实现http请求代码实例
2019/10/31 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
2020/02/26 Python
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
KELLER SPORTS荷兰:在线订购最好的运动产品
2020/10/13 全球购物
优秀求职自荐信怎样写
2013/12/18 职场文书
节水倡议书范文
2014/04/15 职场文书
英文求职信范文
2014/05/23 职场文书
节能标语大全
2014/06/21 职场文书
兽医医药专业求职信
2014/07/27 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
同事去世追悼词
2015/06/23 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript
在redisCluster中模糊获取key方式
2021/07/09 Redis