Keras:目录和自己输入的流量差异

时间:2018-01-10 12:43:34

标签: keras

我注意到Keras作为输出和我自己测试时的准确度下降了大约10%。所以我转载了这个,请看下面的小代码片段。我以两种方式生成输入。输入由Keras ImageGenerator生成(无增强),input2在没有ImageGenerator的情况下生成。

import numpy as np
from keras.preprocessing import image
from keras.preprocessing.image import ImageDataGenerator
import os
import pdb

def preprocess(img):
    img = image.array_to_img(img)
    width, height = img.size

    # Crop 48x48px
    desired_width, desired_height = 48, 48

    if width < 48:
        desired_width = width
    start_x = np.maximum(0, int((width-desired_width)/2))

    img = img.crop((start_x, np.maximum(0, height-desired_height), start_x+desired_width, height))
    img = img.resize((48, 48))

    img = image.img_to_array(img)
    return img / 255.

datagen = ImageDataGenerator(
    featurewise_center=False,
    featurewise_std_normalization=False,
    preprocessing_function=preprocess)

generator = datagen.flow_from_directory(
    'numbers_train', 
    target_size=(48,48),
    batch_size=1024, # Only 405 images in directory, so batch always the same
    classes=['02'],
    shuffle=False,
    class_mode='sparse')

inputs, targets = next(generator)

folder = 'numbers_train/02'
files = os.listdir(folder)
files = list(map(lambda x: os.path.join(folder, x), files))

images = []
for f in files:
    img = image.load_img(f)
    images.append(preprocess(img))
inputs2 = np.asarray(images)

print(np.mean(inputs))
print(np.mean(inputs2))

这给出了两个不同的值,我希望输入和输入2是相同的。

0.403158
0.41354

这导致精度差异约为10%。这里发生了什么?

编辑:这似乎与图像的大小调整有关。在预处理中删除img.resize并在预处理之前在for循环中添加此行,并且平均值相同。但我想要的是调整后的调整大小。

Edit2:所以ImageDataGenerator首先调整大小为(48,48),然后调用预处理函数。我反过来想要它。有人知道这样做的技巧吗?

0 个答案:

没有答案