拓展訓練集數據的一個簡單方法是將每個訓練圖像由一個像素來代替,無論是上一個像素,下一個像素,或者左右的像素。其他的方法也有改變亮度,改變分辨率,圖片旋轉,扭曲,位移等。
我們把50,000幅圖像人為拓展到250,000幅圖像。使用第4節一樣的網絡,因為我們是在訓練5倍的數據,所以減少了過擬合的風險。
>>> 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的訓練正確率。
6.使用卷積神經網絡 — 兩個卷基層+線性修正單元(ReLU)+正則化+拓展數據集+繼續插入額外的全連接層
繼續上面的網絡,我們拓展全連接層的規模,300個隱藏神經元和1000個神經元的額精度分別是99.46%和99.43%.
我們插入一個額外的全連接層
>>> 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%的精度。拓展后的網絡并沒有幫助太多。
7.使用卷積神經網絡 — 兩個卷基層+線性修正單元(ReLU)+拓展數據集+繼續插入額外的全連接層+棄權技術
棄權的基本思想就是在訓練網絡時隨機的移除單獨的激活值,使得模型對單獨的依據丟失更為強勁,因此不太依賴于訓練數據的特質。我們嘗試應用棄權技術到最終的全連接層(不是在卷基層)。這里,減少了迭代期的數量為40個,全連接層使用1000個隱藏神經元,因為棄權技術會丟棄一些神經元。Dropout是一種非常有效有提高泛化能力,降低過擬合的方法!
>>> 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)
使用棄權技術,的到了99.60%的準確率。
8.使用卷積神經網絡 — 兩個卷基層+線性修正單元(ReLU)+正則化+拓展數據集+繼續插入額外的全連接層+棄權技術+組合網絡
組合網絡類似于隨機森林或者adaboost的集成方法,創建幾個神經網絡,讓他們投票來決定最好的分類。我們訓練了5個不同的神經網絡,每個都大到了99.60%的準去率,用這5個網絡來進行投票表決一個圖像的分類。
采用這個方法,達到了99.67%的準確率。
總結
評論
查看更多