2016-01-13 50 views
1

我有必要保持模型儘可能小的部署,可以在一個應用程序高效運行的圖像分類(精度不是真的對我有關)盜夢空間風格卷積

我最近與深度學習和我沒有很好的經驗,因此我現在正在玩Cifar-10的例子。 我試圖用兩個3x3卷積代替前兩個5x5卷積層,如inception paper中所述。

不幸,當我要去測試集進行分類,我周圍0.1正確分類(隨機選擇)

這是第一層的修改的碼(第二個是相似的):

with tf.variable_scope('conv1') as scope: 
    kernel_l1 = _variable_with_weight_decay('weights_l1', shape=[3, 3, 3, 64], 
            stddev=1e-4, wd=0.0) 
    kernel_l2 = _variable_with_weight_decay('weights_l2', shape=[3, 3, 64, 1], 
            stddev=1e-4, wd=0.0) 
    biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.0)) 

    conv_l1 = tf.nn.conv2d(images, kernel_l1, [1, 1, 1, 1], padding='SAME') 
    conv_l2 = tf.nn.depthwise_conv2d(conv_l1, kernel_l2, [1, 1, 1, 1], padding='SAME') 
    bias = tf.nn.bias_add(conv_l2, biases) 
    conv1 = tf.nn.relu(bias, name=scope.name) 
    _activation_summary(conv1) 

它正確嗎?

+0

該代碼確實看起來正確,並且將過濾器大小更改爲3x3不應該如此劇烈地改變測試錯誤率。你在訓練集上得到什麼錯誤率? – keveman

+0

我還沒有一個好的培訓設備(我只有一臺簡單的筆記本電腦上有一臺虛擬機)。因此我在7000步後停止了訓練。原始的cifar10代碼已經保證了74%的正確分類,但不是修改後的版本。在訓練過程中,我有2.34的損失,而原始的cifar10代碼的損失低於1.我正在接受培訓以培訓更長的網絡,我會讓你知道結果。 –

回答

2

看起來你正試圖在第一個卷積圖層中計算64個特徵(對於每個3x3的補丁),並將其直接送入第二個卷積圖層,而沒有中間匯聚層。卷積神經網絡通常具有堆疊卷積層的結構,接着是對比歸一化和最大彙集。

爲了減少處理開銷,研究人員已經嘗試從完全連接到sparsely connected architectures,從而創建初始架構。然而,雖然這些對於高維輸入產生良好結果,但您可能會對TensorFlow中Cifar10的32x32像素產生太多影響。

因此,我認爲這個問題並沒有圍繞整體架構的補丁大小和更多問題。這code是一個已知的好起點。得到這個工作,並開始減少參數,直到它中斷。

+0

我試圖在Google的初始文件中重現該計劃。給定一個明確的網絡,目標是通過一系列較小的卷積(通常是3x3或1xn,接着是nx1)來取代任何卷積n×n(n> 3)來減少參數數目。在這個例子中(見我的問題中引用的論文的圖1),他們用一個接一個地執行的兩個3x3卷積代替5x5卷積,因此只使用18個參數而不是25個。這在每個卷積層中重複。進入「更深層次」,起始塊依次使用多達5個卷積(圖6)。 –