浅谈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中for语句简单遍历数据的方法
May 07 Python
Python脚本获取操作系统版本信息
Dec 17 Python
python实现验证码识别功能
Jun 07 Python
Django框架实现逆向解析url的方法
Jul 04 Python
python实现三维拟合的方法
Dec 29 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
Jan 17 Python
对python中的控制条件、循环和跳出详解
Jun 24 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
Mar 05 Python
python类共享变量操作
Sep 03 Python
详解python内置模块urllib
Sep 09 Python
Python3中PyQt5简单实现文件打开及保存
Jun 10 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 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 之Section与Cookie使用总结
2012/09/14 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
JavaScript格式化数字的函数代码
2010/11/30 Javascript
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
详解Vue取消eslint语法限制
2018/08/04 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
vue实现div单选多选功能
2020/07/16 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
Vant picker 多级联动操作
2020/11/02 Javascript
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
numpy中的高维数组转置实例
2018/04/17 Python
Python新手如何理解循环加载模块
2020/05/29 Python
提高python代码运行效率的一些建议
2020/09/29 Python
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
New Balance加拿大官方网站:运动鞋和健身服装
2018/11/19 全球购物
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
医院护理人员的自我评价分享
2013/10/04 职场文书
医学生职业规划范文
2014/01/05 职场文书
总经理助理工作职责
2014/02/06 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
个人剖析材料范文
2014/09/30 职场文书
审计局2014法制宣传日活动总结
2014/11/01 职场文书
幼儿园中班教育随笔
2015/08/14 职场文书
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript
详解JAVA的控制语句
2021/11/11 Java/Android