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

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.

主站蜘蛛池模板: 苏尼特左旗| 永清县| 孟州市| 福建省| 象州县| 武城县| 兰西县| 邛崃市| 巨鹿县| 楚雄市| 吉水县| 永平县| 莎车县| 扎鲁特旗| 崇左市| 六盘水市| 和林格尔县| 饶平县| 寻甸| 盐源县| 荣成市| 张家界市| 乐东| 六盘水市| 黎平县| 易门县| 鱼台县| 龙海市| 射阳县| 桦南县| 澳门| 河北省| 芜湖市| 永嘉县| 台东市| 青田县| 阜康市| 闽清县| 上思县| 淮安市| 青州市|