【问题标题】:how to know which node is dropped after using keras dropout layer使用keras dropout层后如何知道哪个节点被丢弃
【发布时间】:2018-04-03 12:32:14
【问题描述】:

nick blog可以看出,在CNN模型的dropout层中,我们在bernoulli的基础上drop了一些节点。但是如何验证它,即如何检查哪个节点没有被选中。在 DropConnect 中,我们留下了一些权重,所以我认为在 model.get_weights() 的帮助下我们可以验证,但在 dropout 层的情况下如何验证。

model = Sequential()
model.add(Conv2D(2, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(4, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(8, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss=keras.losses.binary_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

另一个问题是keras 中提到辍学率应该从 0 到 1 浮动。但是对于上述模型,当我采用辍学率 = 1.25 时,我的模型也在工作,这是怎么发生的?

【问题讨论】:

  • 请提供答案
  • 为什么要检查?

标签: python tensorflow keras keras-layer keras-2


【解决方案1】:

关于您的第二个问题,如果您在call 方法形式Dropout 类中看到Keras code

def call(self, inputs, training=None):
    if 0. < self.rate < 1.:
        noise_shape = self._get_noise_shape(inputs)

        def dropped_inputs():
            return K.dropout(inputs, self.rate, noise_shape,
                             seed=self.seed)
        return K.in_train_phase(dropped_inputs, inputs,
                                training=training)
    return inputs

这意味着如果 rate 不在 0 和 1 之间,它将什么都不做。

【讨论】:

  • 好的,明白了,它不会给出错误,但它什么也不做。我想检查一下,以便更好地了解 cnn 模型,并向学生展示。
猜你喜欢
  • 1970-01-01
  • 2021-03-27
  • 2019-06-16
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 1970-01-01
  • 2019-05-22
相关资源
最近更新 更多