浅谈keras中Dropout在预测过程中是否仍要起作用

 更新时间:2020年07月09日 09:04:53   作者:zyl681327  
这篇文章主要介绍了浅谈keras中Dropout在预测过程中是否仍要起作用,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

因为需要,要重写训练好的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爬虫爬取网站图片

    这篇文章主要介绍了Python爬虫爬取网站图片,此次python3主要用requests,解析图片网址主要用beautiful soup,可以基本完成爬取图片功能,需要的朋友可以参考一下
    2022-01-01
  • Python走楼梯问题解决方法示例

    Python走楼梯问题解决方法示例

    这篇文章主要介绍了Python走楼梯问题解决方法,结合实例形式分析了Python基于递归与迭代思想解决走楼梯问题的相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • pytest参数化:@pytest.mark.parametrize详解

    pytest参数化:@pytest.mark.parametrize详解

    pytest.mark.parametrize装饰器能够对测试函数进行参数化处理,使得一个测试函数可以用多组数据执行多次,这有助于检查不同输入下的期望输出是否匹配,提高测试的效率和覆盖率,装饰器可以应用于函数、模块或类,支持多个装饰器组合使用,增强测试的灵活性和综合性
    2024-10-10
  • python使用Apriori算法进行关联性解析

    python使用Apriori算法进行关联性解析

    这篇文章主要为大家分享了python使用Apriori算法进行关联性的解析,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • python中的多cpu并行编程

    python中的多cpu并行编程

    这篇文章主要介绍了python中的多cpu并行编程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Python获取系统所有进程PID及进程名称的方法示例

    Python获取系统所有进程PID及进程名称的方法示例

    这篇文章主要介绍了Python获取系统所有进程PID及进程名称的方法,涉及Python使用psutil对系统进程进行操作的相关实现技巧,需要的朋友可以参考下
    2018-05-05
  • 详解Django框架中用户的登录和退出的实现

    详解Django框架中用户的登录和退出的实现

    这篇文章主要介绍了详解Django框架中用户的登录和退出的实现,Django是重多Python人气框架中最为知名的一个,需要的朋友可以参考下
    2015-07-07
  • python使用os.listdir和os.walk获得文件的路径的方法

    python使用os.listdir和os.walk获得文件的路径的方法

    本篇文章主要介绍了python使用os.listdir和os.walk获得文件的路径的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • python中数组array和列表list的基本用法及区别解析

    python中数组array和列表list的基本用法及区别解析

    大家都知道数组array是同类型数据的有限集合,列表list是一系列按特定顺序排列的元素组成,可以将任何数据放入列表,且其中元素之间没有任何关系,本文介绍python中数组array和列表list的基本用法及区别,感兴趣的朋友一起看看吧
    2022-05-05
  • Python全栈之字符串和列表相关操作

    Python全栈之字符串和列表相关操作

    这篇文章主要为大家介绍了Python字符串和列表相关操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12

最新评论