I do not know if these will fix the problems, but here are some suggestions from reviewing your notebook:
In conv_single_step(), use np.float64(). (error corrected, used to say float32() but that’s wrong).
In conf_forward(), your slicing of A_prev_pad may not be correct. Use [i, :, :, :]. And you must include the “stride” in computing vert_start and horiz_start. Otherwise your code only works if stride = 1.
In pool_forward(), you have the same problem with using the “stride” variable.
I did not review your conv backward code, because it is not graded.
In np.pad() do not set the mode or constant_values arguments.
In conv_single_step(), the instructions say to use float(), not float64().
In conv_forward() and pool_forward(), do not use “stride” in the range() function. When stride=2 as the increment in range(), it skips over half of the input values. That’s why your code fails the grader. The unit test in the notebook does not detect this error.
“stride” should be used as a multiplier when computing vert_start and horiz_start.
In the future, please do not share your code unless a mentor specifically asks to see it.
Regarding float, I used float in my initial implementation, but you suggested np.float32(), but it caused error, so I used np.float64 instead. Why did you suggest np.float32() if my original code was correct.
I deleted the added cell and cleared the output of evaluation cell, but the result is still 75. I cannot delete the evaluation cell. I think I don’t have that permission.