gpt4 book ai didi

tensorflow - Keras 中的 _uses_learning_phase 是什么?

转载 作者:行者123 更新时间:2023-12-04 20:28:27 25 4
gpt4 key购买 nike

我正在尝试在 Keras 中编写自己的循环层,并在 Keras 中注意到了这一行。来源:

    # Properly set learning phase on output tensor.
if 0 < self.dropout + self.recurrent_dropout:
if training is None:
output._uses_learning_phase = True

检查 backend in_train_phase 的代码:
if training is None:
training = learning_phase()
uses_learning_phase = True
else:
uses_learning_phase = False

这相当令人困惑。 “训练”不是“学习阶段”吗?!我想更重要的是,我是否需要设置 _uses_learning_phaseoutput在我的自定义循环层中?

最佳答案

介绍
“训练旗”是指to enable a Model (或层)在预测结果或正在测试时表现与训练不同。
根据所使用的后端,Keras 可能需要实现自己的 bool “训练标志”(在 CNTK 上,对于 Keras 2.2.4)或者可以使用原生后端张量(如 Tensorflow )因此动态目的代码是融合的。

结果层类has a property描述如下:

uses_learning_phase: Whether any operation
of the layer uses `K.in_training_phase()`
or `K.in_test_phase()`.

并且输出张量可以被赋予一个属性 _uses_learning_phase ,该属性由该属性读取。如果任何输出张量具有该属性(并且为 true),则该层的属性返回 true。

在 Keras 的 Recurrent 层中的使用
您的代码片段来自 keras/layers/recurrent.py,当调用私有(private) _generate_dropout_mask 方法时,后端的操作创建者“in_train_phase()”为 being called .因此,正在设置输出张量的标志“_uses_learning_phase”。

引用的后端代码说明

in_training_phase() 和 in_test_phase() 是 just the same . “training”是一个可选参数,引用了 Training Flag。如果未给出参数,则在以下位置自动引用训练标志
training = learning_phase()

但是,输出张量的属性 _uses_learning_phase 仅设置(并设置为 True),如果 Training Flag 是后端的张量并且未设置可选的训练参数。 (这也可以解释,为什么一个层需要自己设置 _uses_learning_phase,但我没有看到通过 in_test_phase 创建操作而不标记输出张量的用例。现在,假设有一个。)

关于tensorflow - Keras 中的 _uses_learning_phase 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52295852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com