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

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.

主站蜘蛛池模板: 松江区| 东方市| 临泽县| 宁波市| 壤塘县| 江山市| 冷水江市| 和田县| 乌拉特中旗| 桦南县| 武宣县| 蕲春县| 娄底市| 平果县| 无为县| 磐石市| 陕西省| 长垣县| 探索| 龙海市| 瓮安县| 鄂托克旗| 张家界市| 成安县| 齐齐哈尔市| 乌拉特中旗| 海兴县| 琼海市| 惠来县| 宜州市| 当阳市| 永年县| 囊谦县| 商河县| 论坛| 晋宁县| 菏泽市| 昆山市| 银川市| 南木林县| 安陆市|