Dropout设置图层权重数组为空

我正在尝试访问此网络的训练重量值:

X = [[1] , [2], [3], [4], [5], [6], [7], [8]]
Y = [[1] , [2] ,[3] ,[4] ,[5] ,[6] ,[7] ,[8]]

from keras.callbacks import History 
history = History()

from keras import optimizers

inputDim = len(X[0])
print('input dim' , inputDim)
model = Sequential()

model.add(Dense(1, activation='sigmoid', input_dim=inputDim))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))
model.add(Dropout(0.2))

sgd = optimizers.SGD(lr=0.009, decay=1e-10, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy', optimizer=sgd , metrics=['accuracy'])
model.fit(X,Y , validation_split=0.1 , verbose=2 , callbacks=[history] , epochs=5,batch_size=32)

可以访问第一层的权重:

weights = model.get_layer(index=1).get_weights()
weights
[array([[-0.93537247]], dtype=float32), array([ 0.00989669], dtype=float32)]

但不是在第二层:

weights = model.get_layer(index=2).get_weights()
weights
[]

看起来添加丢失导致这是删除丢失:

model.add(Dense(1, activation='sigmoid', input_dim=inputDim))
model.add(Dense(1, activation='sigmoid'))

成功访问权重的结果

weights = model.get_layer(index=1).get_weights()
weights

[array([[-0.62137389]], dtype=float32), array([-0.05591233], dtype=float32)]

weights = model.get_layer(index=2).get_weights()
weights

[array([[-1.09568715]], dtype=float32), array([ 0.53271592], dtype=float32)]

阅读Dropout:https://keras.io/layers/core/

“Dropout包括在训练期间每次更新时随机设置输入单位的分数率为0,这有助于防止过度拟合 . ”

辍学可视化:
enter image description here
src:http://www.jmlr.org/papers/volume15/srivastava14a/srivastava14a.pdf

因此,神经元的子集被丢弃了 . 但是在我的例子中,由于第2层中的权重参数是空数组,所有神经元都会被删除?为什么在后续层中添加丢失导致重量参数变得无法访问?

回答(1)

2 years ago

辍学没有重量 . 密集层(和其他一些类型)有 .

您的第一个模型有这些图层:

0: input layer - no weights 
1: Dense(...) - weights and biases    
2: Dropout(...) - no weights    
3: Dense(...) - weights and biases
4: Dropout(...) - no weights

权重是属于单个层的可训练参数 .

辍学者只有一个不能训练的常数参数 . 此参数只删除部分结果 .


密集层使用其权重来更改输入并抛出输出:

#pseudocode
output = Weights x input + biases

辍学层将简单地丢弃一些输出:

#pseudocode - suppose the dropout parameter is 0.2
output = input[take 80% of the elements]