浅谈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的SimpleHTTPServer模块用处及使用方法简介
Jan 22 Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 Python
python 处理微信对账单数据的实例代码
Jul 19 Python
基于Python解密仿射密码
Oct 21 Python
django多种支付、并发订单处理实例代码
Dec 13 Python
python打印异常信息的两种实现方式
Dec 24 Python
tensorflow实现训练变量checkpoint的保存与读取
Feb 10 Python
python mysql 字段与关键字冲突的解决方式
Mar 02 Python
win10从零安装配置pytorch全过程图文详解
May 08 Python
Django修改app名称和数据表迁移方案实现
Sep 17 Python
python regex库实例用法总结
Jan 03 Python
python 如何将两个实数矩阵合并为一个复数矩阵
May 19 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函数的常用方法及注意之处小结
2011/07/10 PHP
php_screw 1.5:php加密: 安装与使用详解
2013/06/20 PHP
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
php将文本文件转换csv输出的方法
2014/12/31 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
适用于javascript开发者的Processing.js入门教程
2016/02/24 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
JavaScript数组方法大全(推荐)
2016/07/05 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
angular基于ng-alain定义自己的select组件示例
2018/02/23 Javascript
js+canvas实现两张图片合并成一张图片的方法
2019/11/01 Javascript
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
python设置windows桌面壁纸的实现代码
2013/01/28 Python
Python端口扫描简单程序
2016/11/10 Python
Python 数据结构之堆栈实例代码
2017/01/22 Python
浅谈python 线程池threadpool之实现
2017/11/17 Python
python实现flappy bird小游戏
2018/12/24 Python
Python对HTML转义字符进行反转义的实现方法
2019/04/28 Python
python安装scipy的方法步骤
2019/06/26 Python
sklearn+python:线性回归案例
2020/02/24 Python
生态学毕业生自荐信
2013/10/27 职场文书
建筑工地宣传标语
2014/06/18 职场文书
挂职学习心得体会
2014/09/09 职场文书
高校教师个人工作总结2014
2014/12/17 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
村干部任职承诺书
2015/01/21 职场文书
大学生社会实践活动总结报告
2015/05/06 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
中学生国庆节演讲稿2015
2015/07/30 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
redis lua限流算法实现示例
2022/07/15 Redis