使用keras dropout layer

时间:2018-04-03 12:32:14

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

nick blog可以清楚地看到,在CNN模型的丢失层中,我们在bernoulli的基础上删除了一些节点。但是如何验证它,即如何检查未选择哪个节点。在DropConnect中我们留下一些权重,所以我认为在model.get_weights()的帮助下我们可以验证,但是在丢失层的情况下如何。

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中提到辍学率应该浮动b / w 0到1.但是对于上面的模型,当我采用辍学率= 1.25时,那么我的模型也在工作,这是怎么回事?

1 个答案:

答案 0 :(得分: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之间,它将不执行任何操作。