官术网_书友最值得收藏!

Overcoming overfitting using dropout

In the previous section of overcoming overfitting using regularization, we used L1/ L2 regularization as a means to avoid overfitting. In this section, we will use another tool that is helpful to achieve the same—dropout.

Dropout can be considered a way in which only a certain percentage of weights get updated, while the others do not get updated in a given iteration of weight updates. This way, we are in a position where not all weights get updated in a weight update process, thus avoiding certain weights to achieve a very high magnitude when compared to others:

model = Sequential()
model.add(Dense(1000, input_dim=784, activation='relu'))
model.add(Dropout(0.75))
model.add(Dense(10, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['accuracy'])
history = model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=100, batch_size=1024, verbose=1)

In the preceding code, we have given a dropout of 0.75; that is, randomly, 75% of weights do not get updated in a certain weight update iteration.

The preceding would result in the gap between the training and test accuracy being not as high as it is when the model was built without dropout in the previous scenario, where the spread of weights was higher.

Note the histogram of weights of the first layer now:

plt.hist(model.get_weights()[-2].flatten())

Note that in the preceding scenario, the frequency count of weights that are beyond 0.2 or -0.2 is less when compared to the 100-epochs scenario.

主站蜘蛛池模板: 罗江县| 金川县| 宣威市| 门头沟区| 儋州市| 佛教| 柳林县| 泰宁县| 武安市| 潼关县| 宁陵县| 张家口市| 香港| 涞水县| 平顺县| 离岛区| 铜梁县| 高邮市| 伊宁市| 垦利县| 循化| 昔阳县| 米易县| 迁安市| 稻城县| 大化| 淮北市| 巫山县| 丹江口市| 千阳县| 贺兰县| 三江| 镶黄旗| 肇州县| 青田县| 霍邱县| 闵行区| 集贤县| 克东县| 乌鲁木齐县| 任丘市|