gpuForward¶
-
ConvolutionalLayer.
gpuForward
()¶ GPUによる順伝播
ソース¶
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);
}