Вы читаете документацию не к той функции: вам надо читать
numpy.ndarray.reshape. И там английским по белому в Notes сказано следующее:
Unlike the free function numpy.reshape, this method on ndarray allows the elements of the shape parameter to be passed in as separate arguments. For example, a.reshape(10, 11) is equivalent to a.reshape((10, 11)).
Число -1 означает не "любые данные", а то, что numpy пересчитает одну недостающую размерность исходя из размера данных и остальных известных размерностей. Например, возьмём RGB-картинку 640х480: (480, 640, 3). В то же время эту структуру можно рассматривать как пачку (батч) из трёх ч/б картинок: (-1, 480, 640, 1), где вместо -1 numpy автоматически рассчитает число 3. У вас size - это не размер массива, а размер одного его измерения. Для того, чтобы понять, как это работает, разберитесь, как numpy размещает данные в памяти и что такое
stride.
Последний аргумент не означает grayscale, он обозначает, что размерность массива в последнем измерении равна 1. Для картинки это иногда можно интерпретировать как grayscale.