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

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.

主站蜘蛛池模板: 浪卡子县| 隆昌县| 灵宝市| 澄江县| 井陉县| 昌宁县| 绥江县| 郓城县| 徐州市| 勐海县| 诸暨市| 江门市| 怀柔区| 城口县| 昌吉市| 太湖县| 都兰县| 阳高县| 周口市| 阳江市| 钦州市| 筠连县| 丹凤县| 贵阳市| 化州市| 凌云县| 潮州市| 鄯善县| 天峻县| 克什克腾旗| 元谋县| 和硕县| 肃宁县| 西盟| 合作市| 砀山县| 淮安市| 济阳县| 军事| 平阳县| 苗栗市|