preprocess_input в керасе резко увеличивает размер поезда

Перед тренировкой с моделью resnet50 я предварительно обработал свой ввод, используя:

img = image.load_img(os.path.join(TRAIN, img), target_size=[224, 224])
img = image.img_to_array(img)
img = np.expand_dims(img, axis=0)
img = preprocess_input(img)

и сохранить массив изображений. Я узнал, что без preprocess_inputразмер массива равен 1,5 ГБ, а preprocess_input - 7 ГБ. Это нормальное поведение? Или я что-то упустил? Почему Zero-center by mean pixel резко увеличить размер ввода?

Вот как zero center by mean pixel определяется в керасе

x = x[..., ::-1] x[..., 0] -= 103.939 x[..., 1] -= 116.779 x[..., 2] -= 123.68

3 ответа

Это потому, что значения пикселей имели тип "uint8", а теперь они имеют тип "float". Итак, теперь у вас есть изображение, которое представляет собой массив 'float', который больше, чем массив 'uint8'.

Чтение из кераса preprocess_inputИзображения нормализуются путем вычитания среднего значения изображения набора данных, которое, по-видимому, является константой, полученной из imagenet. Вот код

def _preprocess_numpy_input(x, data_format, mode):
if mode == 'tf':
    x /= 127.5
    x -= 1.
    return x

if data_format == 'channels_first':
    if x.ndim == 3:
        # 'RGB'->'BGR'
        x = x[::-1, ...]
        # Zero-center by mean pixel
        x[0, :, :] -= 103.939
        x[1, :, :] -= 116.779
        x[2, :, :] -= 123.68
    else:
        x = x[:, ::-1, ...]
        x[:, 0, :, :] -= 103.939
        x[:, 1, :, :] -= 116.779
        x[:, 2, :, :] -= 123.68
else:
    # 'RGB'->'BGR'
    x = x[..., ::-1]
    # Zero-center by mean pixel
    x[..., 0] -= 103.939
    x[..., 1] -= 116.779
    x[..., 2] -= 123.68
return x

Я не понимаю, почему использование этого фрагмента кода увеличило размер моего набора данных.

В соответствии с аргументом документации TensorFlow: numpy.array с плавающей запятой или tf.Tensor, 3D или 4D с 3 цветовыми каналами, со значениями в диапазоне [0, 255]. и функция возвращает Возвращает: предварительно обработанный numpy.array или tf.Tensor с типом float32.

У меня такое ощущение, что целые числа используют разный объем памяти.

Другие вопросы по тегам