浅谈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基础教程之获取本机ip数据包示例
Feb 10 Python
python开发利器之ulipad的使用实践
Mar 16 Python
Django数据库操作的实例(增删改查)
Sep 04 Python
用pycharm开发django项目示例代码
Oct 24 Python
python实现定时发送qq消息
Jan 18 Python
Pycharm以root权限运行脚本的方法
Jan 19 Python
Python列表解析操作实例总结
Feb 26 Python
解决ROC曲线画出来只有一个点的问题
Feb 28 Python
Python环境配置实现pip加速过程解析
Nov 27 Python
详解python 条件语句和while循环的实例代码
Dec 28 Python
如何使用pdb进行Python调试
Jun 30 Python
分享3个非常实用的 Python 模块
Mar 03 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
Linux fgetcsv取得的数组元素为空字符串的解决方法
2011/11/25 PHP
解析php中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
windows7下php开发环境搭建图文教程
2015/01/06 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
setTimeout 不断吐食CPU的问题分析
2009/04/01 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
2019/04/28 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
深入理解Python对Json的解析
2017/02/14 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
python中正则表达式的使用方法
2018/02/25 Python
利用python画出折线图
2018/07/26 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
python安装gdal的两种方法
2019/10/29 Python
Python实现元素等待代码实例
2019/11/11 Python
Python 复平面绘图实例
2019/11/21 Python
python学生信息管理系统实现代码
2019/12/17 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
详解使用CSS3的@media来编写响应式的页面
2017/11/01 HTML / CSS
CSS3实现滚动条动画效果代码分享
2016/08/03 HTML / CSS
Quiksilver美国官网:始于1969年的优质冲浪服和滑雪板外套
2020/04/20 全球购物
大学生入党思想汇报
2014/01/14 职场文书
户籍证明模板
2014/09/28 职场文书
群众路线教育实践活动个人对照检查材料思想汇报(社区班子)
2014/10/06 职场文书
公安机关纪律作风整顿个人剖析材料材料
2014/10/10 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
教师年终个人总结
2015/02/11 职场文书
商务司机岗位职责
2015/04/10 职场文书
学校食堂管理制度
2015/08/04 职场文书
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android