从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时,那么我的模型也在工作,这是怎么回事?
答案 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之间,它将不执行任何操作。