gpuForward ==================== .. js:function:: ConvolutionalLayer.gpuForward() GPUによる順伝播 ソース ^^^^^^ .. code-block:: js gpuForward() { var prev_layer = this.prevLayer; var param_id = "ConvolutionalLayer-forward:" + this.filterSize + ":" + prev_layer.numChannels + ":" + this.numChannels + ":" + this.numRows + ":" + this.numCols + ":" + miniBatchSize; if (this.params[param_id] == undefined) { var shader_src = Shaders.ConvolutionalLayer_Forward .replace(/numChannels/g, this.numChannels.toString() + "u") .replace(/prevNumChannels/g, prev_layer.numChannels.toString() + "u") .replace(/numRows/g, this.numRows.toString() + "u") .replace(/numCols/g, this.numCols.toString() + "u") .replace(/filterSize/g, this.filterSize.toString() + "u"); this.params[param_id] = { id : param_id, vertexShader: shader_src, args : { "activationFunction": this.activationFunction, "zero": this.zero, "prev_y": makeTextureInfo(WebGL2, "float", new ArrayView(miniBatchSize * prev_layer.numChannels, prev_layer.numRows, prev_layer.numCols)), "weight": makeTextureInfo(WebGL2, "float", new ArrayView(this.numChannels * prev_layer.numChannels, this.filterSize, this.filterSize)), "bias": this.bias.dt, "z": this.z_.dt, "y": this.y_.dt } }; } var param = this.params[param_id]; param.args["prev_y"].value = prev_layer.y_.dt; param.args["weight"].value = this.weight.dt; WebGL2.compute(param); }