将 Dropout 添加到测试/推理阶段

2023-12-02

我在 Keras 中针对一些时间序列训练了以下模型:

    input_layer = Input(batch_shape=(56, 3864))
    first_layer = Dense(24, input_dim=28, activation='relu',
                        activity_regularizer=None,
                        kernel_regularizer=None)(input_layer)
    first_layer = Dropout(0.3)(first_layer)
    second_layer = Dense(12, activation='relu')(first_layer)
    second_layer = Dropout(0.3)(second_layer)
    out = Dense(56)(second_layer)
    model_1 = Model(input_layer, out)

然后我用经过训练的层定义了一个新模型model_1并以不同的速率添加了 dropout 层,drp, to it:

    input_2 = Input(batch_shape=(56, 3864))
    first_dense_layer = model_1.layers[1](input_2)
    first_dropout_layer = model_1.layers[2](first_dense_layer)
    new_dropout = Dropout(drp)(first_dropout_layer)
    snd_dense_layer = model_1.layers[3](new_dropout)
    snd_dropout_layer = model_1.layers[4](snd_dense_layer)
    new_dropout_2 = Dropout(drp)(snd_dropout_layer)
    output = model_1.layers[5](new_dropout_2)
    model_2 = Model(input_2, output)

然后我得到这两个模型的预测结果如下:

result_1 = model_1.predict(test_data, batch_size=56)
result_2 = model_2.predict(test_data, batch_size=56)

我期望得到完全不同的结果,因为第二个模型有新的 dropout 层,并且这两个模型是不同的(IMO),但事实并非如此。两者都产生相同的结果。为什么会发生这种情况?


正如我在评论中提到的,Dropout层在推理阶段(即测试模式)关闭,所以当您使用model.predict() the Dropout图层未激活。但是,如果您想要一个使用的模型Dropout无论是在训练阶段还是推理阶段,你都可以通过training调用时的参数,正如弗朗索瓦·乔莱所建议的:

# ...
new_dropout = Dropout(drp)(first_dropout_layer, training=True)
# ...

或者,如果您已经训练了模型,现在想要在推理模式下使用它并保留Dropout层(以及可能在训练/推理阶段具有不同行为的其他层,例如BatchNormalization) 激活后,您可以定义一个后端函数,该函数接受模型的输入以及 Keras 学习阶段:

from keras import backend as K

func = K.function(model.inputs + [K.learning_phase()], model.outputs)

# to use it pass 1 to set the learning phase to training mode
outputs = func([input_arrays] + [1.]) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Dropout 添加到测试/推理阶段 的相关文章

随机推荐

  • C# 程序使用秒表来计时操作时冻结

    我有一个控制灯的 Windows 窗体程序 这种光有自己的类别 我可以做一些事情 比如打开和关闭它 改变颜色等 我可以毫无问题地做到这一点 然而 我想要做的是让灯持续特定的时间 即 100 毫秒或 300 毫秒 取决于使用情况 我尝试使用秒
  • 将 onlongclick 侦听器添加到警报对话框

    我在 android 中有一个 AlertDialog 其中包含来自 sqlite 的好友列表 当我单击列表中的好友姓名时 就会呼叫该好友 我想做的是将一个 longclicklistener 添加到列表中 这样系统就可以提示我删除列表中的
  • 有没有办法在 Postgres 中禁用函数重载

    我和我的用户不在 PL pgSQL 中使用函数重载 每个 模式 名称 元组总是有一个函数 因此 我们希望仅按名称删除函数 更改其签名而不必先删除它 等等 例如 考虑以下函数 CREATE OR REPLACE FUNCTION myfunc
  • 有没有办法在 python 中从头开始创建 .xlsm 文件?

    我在 mac 上使用 python 3 8 1 并尝试创建一个 xlsm文件从头开始 我看过 openpyxl 和 xlsxwriter 它们都能够创建 xlsx文件从头开始 两者都可以编辑现有的 xlsm文件 但我找不到任何有关实际创建的
  • SQLite INSERT ... ON CONFLICT ... WHERE ... DO UPDATE SET 的替代方案

    我正在 Linux 上运行一个使用 SQLite3 版本 3 7 17 的应用程序 这条语句出错了 INSERT INTO taxa taxon id rank parent id VALUES ON CONFLICT taxon id W
  • 从 python 脚本设置 bash 变量

    我在 bash 脚本中调用 python 脚本 我想知道是否有一种简单的方法可以在 python 脚本中设置 bash 变量 Example 我的 bash 脚本 bin bash someVar python3 some folder p
  • 使用 Ajax 和 beforeSend 显示图像

    我对 jquery 和 ajax 比较陌生 我对它们的可能性感到惊讶 我正在开发我的第一个 ajax jquery 带验证插件 网络表单 快完成了 但是有一点不明白 我想显示一个加载图标并使用 beforeSend 方法禁用发送按钮 但它不
  • 如何了解我的平板电脑支持哪些采样率?

    我有一个应用程序可以在许多设备 Xoom Xyboard 等 上完美运行 但在 Galaxy 10 1 上的这一行失败 mrec setAudioSamplingRate 44100 当我注释掉这一行时 一切都会顺利进行 我不确定它默认使用
  • R 中矩阵两列相乘之和

    我使用以下方法在 R 中生成一个矩阵 ncolumns 3 nrows 10 my mat lt matrix runif ncolumns nrows ncol ncolumns 该矩阵表示 3D 中点的坐标 R中如何计算以下值 sum
  • R中按组删除异常值

    在我的数据集中 我必须分别删除每个组的异常值 这是我的数据集 vpg structure list customer c 1L 1L 1L 1L 2L 2L 2L 2L 1L 1L 1L 1L 2L 2L 2L 2L code c 2L 2
  • iOS 15 - 前台通知不会播放通知声音

    在 iOS 15 中播放与通知相关的提示音而不显示横幅或列表的正确方法是什么 在前台处理通知时 无论是本地通知还是推送通知 如果出现以下情况 则不会播放通知声音 UNNotificationPresentationOptions只是soun
  • google automl 会自动进行图像增强吗?

    我正在使用 google 的 automl 使用自定义数据集 该数据集由我收集的图像组成 然而 手动标记图像需要一些时间 所以我想通过图像增强来扩大数据集 例如旋转和模糊 automl 会自动在屏幕后面执行增强吗 AutoML 执行几种类型
  • Pycharm:Python Qt 代码代码补全

    我是 Python 中 Qt 的初学者 我通过使用创建了简单的Qt设计师 我需要什么 用户单击按钮后 应用程序将文本从编辑复制到标签 我有文件example ui来自 Qt 设计师
  • SendInput 与 keybd_event

    MSDN 指出 keybd event 已被 SendInput 取代 在重写过程中 我改用 SendInput 这很好except当尝试发送 Alt 键组合时 在 Win7 64 位系统上 尚未在其他地方尝试过 发送 Alt 键会导致击键
  • 使用 zlib 支持从源代码构建 Python

    在 Ubuntu 12 04 上从源代码构建 Python 3 2 3 时 zlib 模块不可用 我从 python org 下载了官方源代码发行版 并尝试使用以下命令构建和安装它 tar xfa Python3 2 3 tar bz2 c
  • 如何在不破坏单词的情况下分割长字符串?

    我正在寻找类似的东西 str split whole word longString x Where longString是句子的集合 并且 x是每行的字符长度 它可能相当长 我想基本上将其以数组的形式分成多行 例如 longString
  • C++ chrono - 获取 float 或 long long 形式的持续时间

    我有一个持续时间 typedef std chrono high resolution clock Clock Clock time point beginTime Clock time point endTime auto duratio
  • vuepress - 如何使用注册组件自定义组件目录“.vuepress/components”的位置?

    我尝试使用插件注册 组件在 vuepress 中添加自定义组件目录 但这似乎不可能 我尝试过 module exports title Hello VuePress description Just playing around plugi
  • 创建一个包含从相同 C# 源构建的完整 .net、PCL 和 dotnet 核心程序集的单一源项目?

    更新 这是指围绕project json构建的一组过时的 net core工具 这个问题及其答案在当前的 net core工具集中 例如Visual Studio 2017 的实用性非常有限 使用 Visual Studio 2015 更新
  • 将 Dropout 添加到测试/推理阶段

    我在 Keras 中针对一些时间序列训练了以下模型 input layer Input batch shape 56 3864 first layer Dense 24 input dim 28 activation relu activi