forward method

Matrix2d forward(
  1. Matrix2d input
)

Implementation

Matrix2d forward(Matrix2d input) {
  if (padding > 0) {
    input = input.pad(padding);
  }

  int outputRows = ((input.rows() - kernelSize) ~/ stride) + 1;
  int outputCols = ((input.cols() - kernelSize) ~/ stride) + 1;
  Matrix2d output = Matrix2d(outputRows, outputCols);

  for (int filterIdx = 0; filterIdx < outChannels; filterIdx++) {
    Matrix2d kernel = kernels[filterIdx];
    Value bias = biases.values[filterIdx];

    for (int i = 0; i < outputRows; i++) {
      for (int j = 0; j < outputCols; j++) {
        Value sum = Value(0);
        for (int ki = 0; ki < kernelSize; ki++) {
          for (int kj = 0; kj < kernelSize; kj++) {
            int row = i * stride + ki;
            int col = j * stride + kj;
            sum += input.at(row, col) * kernel.at(ki, kj);
          }
        }
        sum += bias;
        output.data!.values[i * outputCols + j] = sum;
      }
    }
  }

  return output;
}