main function

void main()

Implementation

void main() {
  print('========================================');
  print('   LAYER SPEED BENCHMARK (CPU ONLY)     ');
  print('========================================\n');

  int iterations = 50;

  // 1. AveragePooling2DLayer
  AveragePooling2DLayer avgPool = AveragePooling2DLayer(poolSize: 2, stride: 2);
  Tensor<Matrix> poolInput = generateMatrix(128, 128);
  runBenchmark<Matrix, Matrix>('AveragePooling2D (128x128)', avgPool, poolInput, iterations);

  // 2. BatchNorm1D
  BatchNorm1D bn1d = BatchNorm1D(1024);
  Tensor<Vector> bn1dInput = generateVector(1024);
  runBenchmark<Vector, Vector>('BatchNorm1D (1024 features)', bn1d, bn1dInput, iterations);

  // 3. BatchNorm2D
  BatchNorm2D bn2d = BatchNorm2D(16);
  Tensor<Tensor3D> bn2dInput = generateTensor3D(16, 64, 64);
  runBenchmark<Tensor3D, Tensor3D>('BatchNorm2D (16 channels, 64x64)', bn2d, bn2dInput, iterations);

  // 4. Conv2DLayer
  Conv2DLayer conv2d = Conv2DLayer(16, 3, padding: 'same');
  Tensor<Matrix> convInput = generateMatrix(64, 64);
  // Setting showGraph: true here to visualize the convolution bottleneck
  runBenchmark<Matrix, Tensor3D>('Conv2D (16 filters, 3x3, 64x64 in)', conv2d, convInput, iterations, showGraph: true);

  // 5. ConvLSTMLayer
  ConvLSTMLayer convLstm = ConvLSTMLayer(16, 3);
  Tensor<Tensor3D> convLstmInput = generateTensor3D(10, 32, 32);
  runBenchmark<Tensor3D, Matrix>('ConvLSTM (Seq:10, 16 filters, 3x3, 32x32 in)', convLstm, convLstmInput, iterations);

  print('========================================');
  print('         BENCHMARK COMPLETE             ');
  print('========================================');
}