Внимательно посмотрите на ваш кусочек, а это как должно быть.
W1 = np.random.randn(IND, HD)
b1 = np.random.randn(HD)
W2 = np.random.randn(HD, OUTD)
b2 = np.random.randn(OUTD)
И код заработает, вы перезаписываете переменные, что в итоге делает невозможным операции из линейной алгебры в силу несоответствия размерности объектов.