backward method
Implementation
void backward(CommandBuffer backwardTape, {bool fillOnes = true}) {
if (fillOnes == true) {
backwardTape.putInt(OP_FILL);
backwardTape.putString('${id}_grad');
backwardTape.putFloat(1.0);
}
if (creator == null) return;
List<GPUNode> topo = [];
Set<GPUNode> visited = {};
void buildTopo(GPUNode? node) {
if (node == null || visited.contains(node)) return;
visited.add(node);
for (int i = 0; i < node.inputs.length; i = i + 1) {
GPUTensor inputTensor = node.inputs[i];
if (inputTensor.creator != null) {
buildTopo(inputTensor.creator);
}
}
topo.add(node);
}
buildTopo(creator);
for (int i = topo.length - 1; i >= 0; i = i - 1) {
topo[i].backwardFn(backwardTape);
}
}