0
我正在使用convnetjs構建一個交互式教程(就像我自己學習的一樣)。我有一個簡單的9x9圖像的'X'和卷積層與其中一個篩選器作爲3x3'\'... 卷積的結果應該是什麼?
我期望結果是不同的。我預計右邊的圈選結果是(-1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1)/9=0.77而不是7.1。
發生了什麼事情導致7.1?這是由於偏見嗎?我還希望整個結果顯示沿着'\'對角線的最高數字,因爲過濾器的形狀與'X'的'\'部分相匹配。
更新:我預計結果如下。偏見似乎是一個數組[0.1,0.1,0.1]。什麼是計算,以上結果(至少左上像素),而不是以下?
<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>
您應該包含代碼,現在您希望我們猜測哪些代碼產生了這些結果。 –
@MatiasValdenegro這更多的是一個問題,如何一個銜接點而不是我的代碼使用它。但爲了幫助排除故障,我編輯了帖子以包含最少的代碼。 – user3567174
這個問題並不是關於一個銜接點如何工作,你有特定的代碼和結果,你問他們爲什麼不同。卷積層只是卷積加偏置和激活。你有的代碼可能只是做了一些額外的事情,你必須看看代碼。 –