Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras图像生成器不断提供不同数量的标签_Python_Tensorflow_Keras_Neural Network_Generator - Fatal编程技术网

Python Keras图像生成器不断提供不同数量的标签

Python Keras图像生成器不断提供不同数量的标签,python,tensorflow,keras,neural-network,generator,Python,Tensorflow,Keras,Neural Network,Generator,因此,我尝试使用Market1501数据集和keras制作一个简单的精细化Resnet50模型 因此,数据集包含我想要使用的图像(12000左右)和751个标签(0-750) 我可以将数据放入一个go中,因此我必须为此使用图像生成器 所以我的基本模型是这样的 base_model = ResNet50(weights='imagenet', include_top=False,input_tensor=Input(shape=(224,224,3))) x = base_model.output

因此,我尝试使用Market1501数据集和keras制作一个简单的精细化Resnet50模型

因此,数据集包含我想要使用的图像(12000左右)和751个标签(0-750) 我可以将数据放入一个go中,因此我必须为此使用图像生成器

所以我的基本模型是这样的

base_model = ResNet50(weights='imagenet', include_top=False,input_tensor=Input(shape=(224,224,3)))
x = base_model.output
x = Flatten(name="flatten")(x)
x = Dropout(0.5)(x)
x = Dense(750, activation='softmax', name='fc8',kernel_initializer=RandomNormal(mean=0.0, stddev=0.001))(x)
model = Model(input=base_model.input, output=x)
def image_generator(image_array, batch_size):
    # Define data generator arguments
    datagen_args = dict(rotation_range=20,
                    width_shift_range=0.2,
                    height_shift_range=0.2,
                    shear_range=0.1,
                    zoom_range=0.1,
                    horizontal_flip=True)

    # Create different data generators for each image
    # This gives each image a unique transformation wich will make it harder for the network
    datagen = ImageDataGenerator(**datagen_args)
    while True:
        number_of_images = len(image_array)
        indices = np.random.permutation(np.arange(number_of_images))
        num_batches = number_of_images // batch_size
        for bid in range(num_batches):
            # loop once per batch
            images = []
            lables = []
            batch_indices = indices[bid * batch_size: (bid + 1) * batch_size]
            for i in batch_indices:
                img, lbl = image_array[i]
                # Process images
                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)
                img = datagen.random_transform(img)
                images.append(img)
                lables.append(lbl)
            yield np.array(images), to_categorical(lables)
batch_size = 64
NUM_EPOCHS = 40
train_gen = image_generator(image_array, batch_size)
num_train_steps = len(image_array)
我的图像发生器是这样的

base_model = ResNet50(weights='imagenet', include_top=False,input_tensor=Input(shape=(224,224,3)))
x = base_model.output
x = Flatten(name="flatten")(x)
x = Dropout(0.5)(x)
x = Dense(750, activation='softmax', name='fc8',kernel_initializer=RandomNormal(mean=0.0, stddev=0.001))(x)
model = Model(input=base_model.input, output=x)
def image_generator(image_array, batch_size):
    # Define data generator arguments
    datagen_args = dict(rotation_range=20,
                    width_shift_range=0.2,
                    height_shift_range=0.2,
                    shear_range=0.1,
                    zoom_range=0.1,
                    horizontal_flip=True)

    # Create different data generators for each image
    # This gives each image a unique transformation wich will make it harder for the network
    datagen = ImageDataGenerator(**datagen_args)
    while True:
        number_of_images = len(image_array)
        indices = np.random.permutation(np.arange(number_of_images))
        num_batches = number_of_images // batch_size
        for bid in range(num_batches):
            # loop once per batch
            images = []
            lables = []
            batch_indices = indices[bid * batch_size: (bid + 1) * batch_size]
            for i in batch_indices:
                img, lbl = image_array[i]
                # Process images
                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)
                img = datagen.random_transform(img)
                images.append(img)
                lables.append(lbl)
            yield np.array(images), to_categorical(lables)
batch_size = 64
NUM_EPOCHS = 40
train_gen = image_generator(image_array, batch_size)
num_train_steps = len(image_array)
我是这样用的

base_model = ResNet50(weights='imagenet', include_top=False,input_tensor=Input(shape=(224,224,3)))
x = base_model.output
x = Flatten(name="flatten")(x)
x = Dropout(0.5)(x)
x = Dense(750, activation='softmax', name='fc8',kernel_initializer=RandomNormal(mean=0.0, stddev=0.001))(x)
model = Model(input=base_model.input, output=x)
def image_generator(image_array, batch_size):
    # Define data generator arguments
    datagen_args = dict(rotation_range=20,
                    width_shift_range=0.2,
                    height_shift_range=0.2,
                    shear_range=0.1,
                    zoom_range=0.1,
                    horizontal_flip=True)

    # Create different data generators for each image
    # This gives each image a unique transformation wich will make it harder for the network
    datagen = ImageDataGenerator(**datagen_args)
    while True:
        number_of_images = len(image_array)
        indices = np.random.permutation(np.arange(number_of_images))
        num_batches = number_of_images // batch_size
        for bid in range(num_batches):
            # loop once per batch
            images = []
            lables = []
            batch_indices = indices[bid * batch_size: (bid + 1) * batch_size]
            for i in batch_indices:
                img, lbl = image_array[i]
                # Process images
                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)
                img = datagen.random_transform(img)
                images.append(img)
                lables.append(lbl)
            yield np.array(images), to_categorical(lables)
batch_size = 64
NUM_EPOCHS = 40
train_gen = image_generator(image_array, batch_size)
num_train_steps = len(image_array)
问题是它给了我这个错误

Error when checking target: expected fc8 to have shape (751,) but got array with shape (742,)
更大的问题是第二个数字一直在变化,所以我知道这是因为图像生成器没有在每次迭代中获得每个标签

编辑 数据是如何生成的 有一个外部列表,其中包含图像和标签,如下所示

['0002_451_03.jpg', '0']
img001.jpg, 0
img002.jpg, 0
...
img1500.jpg, 750
这将被读入并加载到数组中。标签是图像更改后的数字

batch_indices = indices[bid * batch_size: (bid + 1) * batch_size]


您的标签不是来自ImageDataGenerator,它们是传递给函数的外部数据,因此在您提供显示数据生成方式的代码之前,您的问题无法回答。我在上面对其进行了编辑,以显示我在数据中的读取方式请稍等,让我试试。谢谢你解释一下min((投标+1)*批量大小,图片数量)是做什么的,它是做什么的