【发布时间】:2017-10-05 11:59:24
【问题描述】:
我有一个关于Keras函数Dropout的问题,参数为noise_shape。
问题 1:
如果您的输入具有形状(batch_size, timesteps, features)并且您希望所有时间步的 dropout 掩码相同,则可以使用 noise_shape=(batch_size, 1, features) 是什么意思?添加这个参数有什么好处?
这是否意味着将被丢弃的神经元数量在时间步长上是相同的?这意味着在每个时间步 t,都会有 n 个神经元被丢弃?
问题 2: 创建模型时是否必须在noise_shape 中包含“batch_size”? --> 看下面的例子。
假设我有一个形状为 (10000, 1, 100, 2) -->(数据数、通道、时间步长、特征数)的多元时间序列数据。
然后我创建批次大小为 64 的批次 --> (64, 1, 100, 2)
如果我想创建一个带有 dropout 的 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) 作为噪声形状吗?或者我应该定义一个名为“batch_size”的变量,然后将它传递给这个参数,如 (batch_size, 64, 1, 1)?
【问题讨论】:
标签: python deep-learning keras dropout