gpt4 book ai didi

tensorflow - 将 DROPOUT 添加到 Tensorflow CIFAR10 深度 CNN 示例

转载 作者:行者123 更新时间:2023-12-03 22:40:54 24 4
gpt4 key购买 nike

我希望将 dropout 添加到 tensorflow CIFAR10 教程示例代码中,但遇到了一些困难。

Deep MNIST tensorflow 教程包括一个 dropout 示例,但它使用交互式图形,这与 CIFAR10 教程使用的方法不同。此外,CIFAR10 教程没有使用占位符,也没有使用 feed_dict 将变量传递给优化器,MNIST 模型使用它来传递 dropout 概率以进行训练。

我正在尝试:

在 cifar10_train.train() 中,我在默认图表下定义了 dropout 概率占位符;即:

def train():
"""Train CIFAR-10 for a number of steps."""
with tf.Graph().as_default():
global_step = tf.Variable(0, trainable=False)
keep_drop_prob = = tf.placeholder(tf.float32)

在下方,仍在 train() 模块中,当我通过调用 cifar10.inference() 构建计算图时,我还传递了 keep_drop_prob 占位符,如下所示:

"""Build a Graph that computes the logits predictions from the
inference model."""
logits = cifar10.inference(images, keep_drop_prob)

在 cifar10.inference() 模块中,我现在使用传递的 keep_drop_prob 占位符并使用它来定义我的丢弃层,如下所示:

drop1 = tf.nn.dropout(norm1, keep_drop_prob)

现在我在计算损失时为 keep_drop_prob 定义并传递一个值,仍然在 train() 模块中,如下所示:

"""Calculate loss."""
loss = cifar10.loss(logits, labels, keep_drop_prob = 0.5)

然后在 cifar10.loss() 模块中,我在计算交叉熵时使用传递的 keep_drop_prob 值,如下所示:

"""Calculate the average cross entropy loss across the batch."""
labels = tf.cast(labels, tf.int64)
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(
logits, labels, keep_drop_prob, name='cross_entropy_per_example')

现在,我不确定到目前为止所做的是否正确,以及下一步需要做什么。

如有任何帮助,我们将不胜感激!

最佳答案

我相信我已经找到了解决方案。

看来我走在正确的轨道上,但绕过 keep_drop_prob 占位符有点过火了。

为了添加 dropout,我做了以下操作:

我在 cifar10_train.train() 模块中添加了 keep_drop_prob 占位符,如下所示:

def train():
"""Train CIFAR-10 for a number of steps."""
with tf.Graph().as_default():
global_step = tf.Variable(0, trainable=False)
keep_drop_prob = = tf.placeholder(tf.float32)

在 cifar10_train.train() 模块中构建图形时,我将占位符传递给它,但也定义了它的值

"""Build a Graph that computes the logits predictions from the
inference model."""
logits = cifar10.inference(images, keep_drop_prob=0.5)

在 cifar10.inference() 模块中,我现在使用传递的 keep_drop_prob 占位符来定义我的 dropout 层,并将它传递给激活摘要以记录在 tensorboard 中:

drop1 = tf.nn.dropout(norm1, keep_drop_prob)
_activation_summary(drop1)

当我查看 tensorboard 图表时,我在那里看到了我的 dropout 操作。我还可以询问 dropout op 中的 keep_prob 变量,并通过更改构建 logits 图时传递的值来影响其值属性。

我的下一个测试是将 keep_drop_prob 设置为 1 和 0,并确保我从我的网络中获得预期的结果。

我不确定这是实现 dropout 的最有效方式,但我相当确定它有效。

请注意,我只有一个 keep_drop_prob 占位符,我将其传递给许多层 dropout(每个卷积 atm 之后一个)。我认为 tensorflow 为每个 dropout 操作使用一个唯一的分布,而不是需要一个唯一的占位符。

编辑:不要忘记对 eval 模块进行必要的更改,但要为 dropout 传递值 1。

关于tensorflow - 将 DROPOUT 添加到 Tensorflow CIFAR10 深度 CNN 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40098914/

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