拓展訓(xùn)練集數(shù)據(jù)的一個(gè)簡(jiǎn)單方法是將每個(gè)訓(xùn)練圖像由一個(gè)像素來(lái)代替,無(wú)論是上一個(gè)像素,下一個(gè)像素,或者左右的像素。其他的方法也有改變亮度,改變分辨率,圖片旋轉(zhuǎn),扭曲,位移等。
我們把50,000幅圖像人為拓展到250,000幅圖像。使用第4節(jié)一樣的網(wǎng)絡(luò),因?yàn)槲覀兪窃谟?xùn)練5倍的數(shù)據(jù),所以減少了過(guò)擬合的風(fēng)險(xiǎn)。
>>> expanded_training_data, _, _ = network3.load_data_shared(
"../data/mnist_expanded.pkl.gz")
>>> net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
filter_shape=(40, 20, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
FullyConnectedLayer(n_in=40*4*4, n_out=100, activation_fn=ReLU),
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
>>> net.SGD(expanded_training_data, 60, mini_batch_size, 0.03,
validation_data, test_data, lmbda=0.1)
這次的到了99.37的訓(xùn)練正確率。
6.使用卷積神經(jīng)網(wǎng)絡(luò) — 兩個(gè)卷基層+線性修正單元(ReLU)+正則化+拓展數(shù)據(jù)集+繼續(xù)插入額外的全連接層
繼續(xù)上面的網(wǎng)絡(luò),我們拓展全連接層的規(guī)模,300個(gè)隱藏神經(jīng)元和1000個(gè)神經(jīng)元的額精度分別是99.46%和99.43%.
我們插入一個(gè)額外的全連接層
>>> net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
filter_shape=(40, 20, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
FullyConnectedLayer(n_in=40*4*4, n_out=100, activation_fn=ReLU),
FullyConnectedLayer(n_in=100, n_out=100, activation_fn=ReLU),
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
>>> net.SGD(expanded_training_data, 60, mini_batch_size, 0.03,
validation_data, test_data, lmbda=0.1)
這次取得了99.43%的精度。拓展后的網(wǎng)絡(luò)并沒(méi)有幫助太多。
7.使用卷積神經(jīng)網(wǎng)絡(luò) — 兩個(gè)卷基層+線性修正單元(ReLU)+拓展數(shù)據(jù)集+繼續(xù)插入額外的全連接層+棄權(quán)技術(shù)
棄權(quán)的基本思想就是在訓(xùn)練網(wǎng)絡(luò)時(shí)隨機(jī)的移除單獨(dú)的激活值,使得模型對(duì)單獨(dú)的依據(jù)丟失更為強(qiáng)勁,因此不太依賴于訓(xùn)練數(shù)據(jù)的特質(zhì)。我們嘗試應(yīng)用棄權(quán)技術(shù)到最終的全連接層(不是在卷基層)。這里,減少了迭代期的數(shù)量為40個(gè),全連接層使用1000個(gè)隱藏神經(jīng)元,因?yàn)闂墮?quán)技術(shù)會(huì)丟棄一些神經(jīng)元。Dropout是一種非常有效有提高泛化能力,降低過(guò)擬合的方法!
>>> net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
filter_shape=(40, 20, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
FullyConnectedLayer(
n_in=40*4*4, n_out=1000, activation_fn=ReLU, p_dropout=0.5),
FullyConnectedLayer(
n_in=1000, n_out=1000, activation_fn=ReLU, p_dropout=0.5),
SoftmaxLayer(n_in=1000, n_out=10, p_dropout=0.5)],
mini_batch_size)
>>> net.SGD(expanded_training_data, 40, mini_batch_size, 0.03,
validation_data, test_data)
使用棄權(quán)技術(shù),的到了99.60%的準(zhǔn)確率。
8.使用卷積神經(jīng)網(wǎng)絡(luò) — 兩個(gè)卷基層+線性修正單元(ReLU)+正則化+拓展數(shù)據(jù)集+繼續(xù)插入額外的全連接層+棄權(quán)技術(shù)+組合網(wǎng)絡(luò)
組合網(wǎng)絡(luò)類似于隨機(jī)森林或者adaboost的集成方法,創(chuàng)建幾個(gè)神經(jīng)網(wǎng)絡(luò),讓他們投票來(lái)決定最好的分類。我們訓(xùn)練了5個(gè)不同的神經(jīng)網(wǎng)絡(luò),每個(gè)都大到了99.60%的準(zhǔn)去率,用這5個(gè)網(wǎng)絡(luò)來(lái)進(jìn)行投票表決一個(gè)圖像的分類。
采用這個(gè)方法,達(dá)到了99.67%的準(zhǔn)確率。
總結(jié)
評(píng)論