浅谈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实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
在Python中使用SQLite的简单教程
Apr 29 Python
基于Python Numpy的数组array和矩阵matrix详解
Apr 04 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
May 04 Python
Python批量查询关键词微信指数实例方法
Jun 27 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
python实现音乐播放和下载小程序功能
Apr 26 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
May 20 Python
python 视频下载神器(you-get)的具体使用
Jan 06 Python
Pyecharts 中Geo函数常用参数的用法说明
Feb 01 Python
python中子类与父类的关系基础知识点
Feb 02 Python
Python 流媒体播放器的实现(基于VLC)
Apr 28 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中对数据库操作的封装
2006/10/09 PHP
PHP内核探索:变量概述
2014/01/30 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
php实现两个数组相加的方法
2015/02/17 PHP
详解PHP的Yii框架的运行机制及其路由功能
2016/03/17 PHP
php 浮点数比较方法详解
2017/05/05 PHP
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
jquery radio 操作代码
2011/03/16 Javascript
javascript如何写热点图
2015/12/08 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
2016/05/31 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
2017/07/21 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
vue2.0安装style/css loader的方法
2018/03/14 Javascript
vue cli 3.x 项目部署到 github pages的方法
2019/04/17 Javascript
python中enumerate函数遍历元素用法分析
2016/03/11 Python
python实现简单爬虫功能的示例
2016/10/24 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
python调用百度语音识别实现大音频文件语音识别功能
2018/08/30 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
Python pickle模块实现对象序列化
2019/11/22 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
2014/05/07 HTML / CSS
南京软件公司的.net程序员笔试题
2014/08/31 面试题
同学聚会欢迎辞
2014/01/14 职场文书
大学军训感言1000字
2014/02/25 职场文书
项目合作意向书模板
2014/07/29 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
军事博物馆观后感
2015/06/05 职场文书
优质服务标语口号
2015/12/26 职场文书
Python+Pillow+Pytesseract实现验证码识别
2022/05/11 Python