带有noise_shape的Keras Dropout

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有noise_shape的Keras Dropout相关的知识,希望对你有一定的参考价值。

我有一个关于Keras函数Dropout的问题,其中包含noise_shape的参数。

问题1:

如果您的输入具有形状(batch_size,timesteps,features)并且您希望所有时间步长的丢失掩码相同,那么您可以使用noise_shape =(batch_size,1,features)?,添加的好处是什么?这个论点?

这是否意味着将被淘汰的神经元数量沿着时间步长是相同的?这意味着在每个时间步都会有n个神经元掉落?

问题2:在创建模型时,我是否必须在noise_shape中包含'batch_size'? - >参见以下示例。

假设我有一个多变量的时间序列数据,形状为(10000,1,100,2) - >(数据的数量,通道,时间步长,特征数)。

然后我创建批量大小为64 - >(64,1,100,2)的批次

如果我想创建一个退出的CNN模型,我使用Keras功能API:

inp = Input([1, 100, 2])
conv1 = Conv2D(64, kernel_size=(11,2), strides(1,1),data_format='channels_first')(inp)
max1 = MaxPooling2D((2,1))(conv1)
max1_shape = max1._keras_shape
drop1 = Dropout((0.1, noise_shape=[**?**, max1._keras_shape[1], 1, 1]))

因为图层max1的输出形状应为(None,64,50,1),并且我不能将None分配给问号(对应于batch_size)

我想知道我应该如何应对这个问题?我应该使用(64,1,1)作为noise_shape吗?或者我应该定义一个名为'batch_size'的变量,然后将它传递给这个参数,如(batch_size,64,1,1)?

答案

问题1:

我觉得这有点像一个numpy广播。

想象一下,你有2个批次巫婆3个时间步和4个功能(这是一个小例子,以便更容易显示它):( 2,3,4)

如果使用(2,1,4)的噪声形状,则每个批次都有自己的丢失掩码,该掩码将应用于所有时间步长。

所以我们说这些是形状的权重(2,3,4):

array([[[  1,   2,   3,   4],
        [  5,   6,   7,   8],
        [ 10,  11,  12,  13]],

       [[ 14,  15,  16,  17],
        [ 18,  19,  20,  21],
        [ 22,  23,  24,  25]]])

这将是随机的noise_shape(2,1,4)(1就像保持,0就像关闭它):

array([[[ 1,  1,  1,  0]],

       [[ 1,  0,  0,  1]]])

所以你有这两种噪音形状(每批次都有)。那么它将沿着时间步长轴进行广播。

array([[[ 1,  1,  1,  0],
        [ 1,  1,  1,  0],
        [ 1,  1,  1,  0]],

       [[ 1,  0,  0,  1],
        [ 1,  0,  0,  1],
        [ 1,  0,  0,  1]]])

并适用于权重:

array([[[  1,   2,   3,   0],
        [  5,   6,   7,   0],
        [ 10,  11,  12,   0]],

       [[ 14,   0,   0,  17],
        [ 18,   0,   0,  21],
        [ 22,   0,   0,  25]]])

问题2:

说实话,我不确定你的第二个问题。

编辑:您可以做的是获取输入形状的第一个维度,该维度应该是batch_size,如此github issue中所建议的:

import tensorflow as tf

...

batch_size = tf.shape(inp)[0]
drop1 = Dropout((0.1, noise_shape=[batch_size, max1._keras_shape[1], 1, 1]))

你可以看到我在张量流后端。 Dunno如果theano也有这些问题,如果它确实你可能只能用theano形状等效解决它。

以上是关于带有noise_shape的Keras Dropout的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 Keras 的 TensorBoard 创建日志文件时出错

为啥带有 TensorFlow 的 Keras 没有使用所有 GPU 内存

带有 TensorFlow 后端的 Keras 不使用 GPU

keras中的二元交叉熵和带有logits的二元交叉熵有啥区别?

在 keras 回调中使用带有自定义参数的自定义函数

无论如何在带有 AMD GPU 的 Mac 中使用 Keras?