protected void BackwardCpu(NdArray y, NdArray x) { int ndim = x.Shape.Length; if (y.Shape.Length != ndim) { NdArray.Sum(y, false, Enumerable.Range(0, y.Shape.Length - ndim).ToArray()); } List <int> axis = new List <int>(); for (int i = 0; i < x.Shape.Length; i++) { if (x.Shape[i] == 1) { axis.Add(i); } } if (axis.Count > 0) { NdArray result = NdArray.Sum(y, true, axis.ToArray()); for (int i = 0; i < x.Grad.Length; i++) { x.Grad[i] += result.Grad[i]; } } else { for (int i = 0; i < x.Grad.Length; i++) { x.Grad[i] += y.Grad[i]; } } }