2017-02-09 99 views
0

我正在使用convnetjs構建一個交互式教程(就像我自己學習的一樣)。我有一個簡單的9x9圖像的'X'和卷積層與其中一個篩選器作爲3x3'\'... enter image description here卷積的結果應該是什麼?

我期望結果是不同的。我預計右邊的圈選結果是(-1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1)/9=0.77而不是7.1。

發生了什麼事情導致7.1?這是由於偏見嗎?我還希望整個結果顯示沿着'\'對角線的最高數字,因爲過濾器的形狀與'X'的'\'部分相匹配。

更新:我預計結果如下。偏見似乎是一個數組[0.1,0.1,0.1]。什麼是計算,以上結果(至少左上像素),而不是以下?

enter image description here

<html> 
 

 
<head> 
 
    <script src="http://cs.stanford.edu/people/karpathy/convnetjs/build/convnet-min.js"></script> 
 
</head> 
 

 
<body> 
 
    <script> 
 
    // Initialize an input that is 9x9 and initialized with zeroes. 
 
    let inputVol = new convnetjs.Vol(9, 9, 1, 0.0); 
 

 
    // Manually set the input weights from zeroes to a 'X'... 
 
    inputVol.w = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; 
 

 
    // Define the layers 
 
    let layers = []; 
 
    layers.push({ 
 
     type: 'input', 
 
     out_sx: 9, 
 
     out_sy: 9, 
 
     out_depth: 1 
 
    }); 
 
    layers.push({ 
 
     type: 'conv', 
 
     sx: 3, 
 
     pad: 0, 
 
     filters: 3, 
 
     stride: 1, 
 
     activation: 'relu' 
 
    }); 
 
    let net = new convnetjs.Net(); 
 
    net.makeLayers(layers); 
 

 
    let convLayer = net.layers[1]; 
 
    let convLayerFilters = convLayer.filters; 
 

 
    // Set filters manually 
 
    // looks like a '\' 
 
    convLayerFilters[0].w = [1, -1, -1, -1, 1, -1, -1, -1, 1]; 
 
    // looks like a 'X' 
 
    convLayerFilters[1].w = [1, -1, 1, -1, 1, -1, 1, -1, 1]; 
 
    // looks like a '/' 
 
    convLayerFilters[2].w = [-1, -1, 1, -1, 1, -1, 1, -1, -1]; 
 

 
    // Run the net 
 
    net.forward(inputVol); 
 

 
    // Prints '7.1' instead of '0.77'. Why??? 
 
    console.log(net.layers[1].out_act.w[0]); 
 
    </script> 
 
</body> 
 

 
</html>

+0

您應該包含代碼,現在您希望我們猜測哪些代碼產生了這些結果。 –

+0

@MatiasValdenegro這更多的是一個問題,如何一個銜接點而不是我的代碼使用它。但爲了幫助排除故障,我編輯了帖子以包含最少的代碼。 – user3567174

+0

這個問題並不是關於一個銜接點如何工作,你有特定的代碼和結果,你問他們爲什麼不同。卷積層只是卷積加偏置和激活。你有的代碼可能只是做了一些額外的事情,你必須看看代碼。 –

回答

0

是的,因爲偏置,使其保持在規定的範圍內發生。

偏差是您可以添加到卷積結果中的每個元素以增加來自相鄰像素的附加影響的值。由於某些卷積可能會得到負數(這些數字不能用0-255格式表示),所以偏差可防止信號漂移超出範圍。您可以選擇添加127或128的偏差以允許某些負數可表示(其值爲隱含的+127或+128)。

相關問題