backpropagation ============================== .. js:function:: MaxPoolingLayer.backpropagation() 誤差逆伝播 ソース ^^^^^^ .. code-block:: js 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(); }