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

Dropout

Dropout is a widely used technique to improve convergence and robustness of a neural net and prevent neural nets from overfitting. It consists of setting some random values to zero for the layers on which we'd like it to apply. It introduces some randomness in the data at every epoch.

Usually, dropout is used before the fully connected layers and not used very often in convolutional layers. Let's add the following lines before each of our two fully connected layers:

dropout = 0.5

if dropout > 0 :
    mask = srng.binomial(n=1, p=1-dropout, size=hidden_input.shape)
    # The cast is important because
    # int * float32 = float64 which make execution slower
    hidden_input = hidden_input * T.cast(mask, theano.config.floatX)

The full script is in 5-cnn-with-dropout.py. After 1,000 iterations, the validation error of the CNN with dropout continues to drops down to 1.08%, while the validation error of the CNN without dropout will not go down by 1.22%.

Readers who would like to go further with dropout should have a look at maxout units. They work well with dropout and replace the tanh non-linearities to get even better results. As dropout does a kind of model averaging, maxout units try to find the optimal non-linearity to the problem.

主站蜘蛛池模板: 平遥县| 潞城市| 个旧市| 乌兰浩特市| 彭泽县| 新蔡县| 镇赉县| 五大连池市| 黔江区| 锡林郭勒盟| 五莲县| 凤山市| 崇礼县| 永清县| 巴南区| 中江县| 衡山县| 息烽县| 永善县| 淳化县| 朝阳区| 霸州市| 合水县| 会理县| 崇义县| 施秉县| 曲阜市| 龙井市| 彭水| 霍山县| 五寨县| 漠河县| 米泉市| 兴隆县| 卢氏县| 灵武市| 洛浦县| 湟中县| 南华县| 甘南县| 汾西县|