backpropagation¶
-
MaxPoolingLayer.
backpropagation
()¶ 誤差逆伝播
ソース¶
backpropagation() {
var lap = new Lap(this.backwardTime);
var prev_layer = this.prevLayer;
Assert(this.y_.dt.length == this.nextLayer.deltaX.dt.length);
for(var i = 0; i < this.deltaX.dt.length; i++){
this.deltaX.dt[i] = 0;
}
lap.Time();
// 出力先
var output_idx = 0;
// バッチ内のデータに対し
for (var batch_idx = 0; batch_idx < miniBatchSize; batch_idx++) {
// すべての特徴マップに対し
for (var channel_idx = 0; channel_idx < this.numChannels; channel_idx++) {
var offset = batch_idx * prev_layer.unitSize + channel_idx * prev_layer.numRows * prev_layer.numCols;
// 出力の行に対し
for (var r1 = 0; r1 < this.numRows; r1++) {
var r0 = r1 * this.filterSize;
// 出力の列に対し
for (var c1 = 0; c1 < this.numCols; c1++) {
var c0 = c1 * this.filterSize;
var delta = this.nextLayer.deltaX.dt[output_idx];
if(delta != 0){
var r2 = this.maxRow[output_idx] | 0;
var c2 = this.maxCol[output_idx] | 0;
var prev_y_idx = offset + (r0 + r2) * prev_layer.numCols + (c0 + c2);
this.deltaX.dt[prev_y_idx] += delta;
}
output_idx++;
}
}
}
}
Assert(output_idx == this.nextLayer.deltaX.dt.length);
lap.Time();
}