arrayfire / arrayfire-rust

Rust wrapper for ArrayFire
BSD 3-Clause "New" or "Revised" License
814 stars 57 forks source link

zero padding not working in convolve2_nn [BUG] #315

Closed MichaelMcCulloch closed 2 years ago

MichaelMcCulloch commented 2 years ago

Description

screenshot of failure

Reproducible Code and/or Steps

#[test]
    fn mnist__convolutional_neural_net__learns_mnist_fail() {
        let signal = randu::<f32>(dim4!(8, 8, 3, 1));

        let quadrant1 = Array::new(&vec![1f32, 0.0, 0.0, 0.0], dim4![2, 2, 1, 1]);

        let q1 = convolve2_nn(
            &signal,
            &quadrant1,
            dim4!(2, 2, 1, 1),
            dim4!(0, 0, 1, 1),
            dim4!(1, 1, 1, 1),
        );

        af_print!("q1", q1);
    }

System Information

Please provide the following information:

  1. ArrayFire version
    • 3.8
  2. Devices installed on the system *. RTX 3090, R9 5950X
  3. (optional) Output from the af::info() function if applicable.

ArrayFire v3.8.1 (CUDA, 64-bit Linux, build default) Platform: CUDA Runtime 11.5, Driver: 510.47.03 [0] NVIDIA GeForce RTX 3090, 24252 MB, CUDA Compute 8.6 test tests::info____ ... ok

  1. Output from the following scripts:

LSB Version: n/a Distributor ID: ManjaroLinux Description: Manjaro Linux Release: 21.2.3 Codename: Qonos

name, memory.total [MiB], driver_version NVIDIA GeForce RTX 3090, 24576 MiB, 510.47.03

Checklist

syurkevi commented 2 years ago

For devs reference, issue is on this line: https://github.com/arrayfire/arrayfire-rust/blob/f53bf4cb0faa33d6d4d5ee984eb9cb74a8fd1f27/src/ml/mod.rs#L81 and the corresponding line for the gradient function as well. ndims() will return 0 for 0 padding when it should pass a "2" (or matching signal.ndims() ) instead

9prady9 commented 2 years ago

I am contemplating if I should avoid using dim4 for padding arguments all together. I am looking into it, will send in a fix soon. Thank you for reporting it @MichaelMcCulloch