размер наборов данных увеличивается при запуске модели VGG16 - PullRequest
0 голосов
/ 28 июня 2019

У меня есть поезд и действительный набор данных, каждая папка содержит 493 класса, и каждый класс поезда содержит 30 изображений, каждый действительный класс содержит 20 изображений.

Когда я запускаю код во время компиляции, он должен генерировать Поезд: 493 * 30 = 14790 Действительный: 493 * 20 = 9860

Но он генерирует дополнительные изображения, такие как Поезд = 14830 Действительный = 9890

Код:

import os, sys, json
from keras.preprocessing.image import ImageDataGenerator
from keras.callbacks import ModelCheckpoint
from keras.applications.vgg16 import VGG16
from keras.models import Model, Sequential
from keras.layers import Input, Activation, Dropout, Flatten, Dense
from keras import optimizers

nb_epoch = 20

result_dir = './results'
train_dir = '/Users/sripdeep/Desktop/Krupali/crab_vgg16/crabdata_vgg16/train'
valid_dir = '/Users/sripdeep/Desktop/Krupali/crab_vgg16/crabdata_vgg16/valid'
if not os.path.exists(result_dir):
    os.mkdir(result_dir)

def save_history(history, result_file):
    loss = history.history['loss']
    acc = history.history['acc']
    val_loss = history.history['val_loss']
    val_acc = history.history['val_acc']
    nb_epoch = len(acc)

    with open(result_file, "w") as fp:
        fp.write("epoch\tloss\tacc\tval_loss\tval_acc\n")
        for i in range(nb_epoch):
            fp.write("%d\t%f\t%f\t%f\t%f\n" % (i, loss[i], acc[i], val_loss[i], val_acc[i]))

if __name__ == '__main__':

    h = 224 
    w = 224 
    nb_class = 493 
    ckpt_file = 'ckpt-weight.h5'

    # model construction
    input_tensor = Input(shape=(h, w, 3))
    vgg16_model = VGG16(include_top=False, weights='imagenet', input_tensor=input_tensor)

    top_model = Sequential()
    top_model.add(Flatten(input_shape=vgg16_model.output_shape[1:]))
    top_model.add(Dense(256, activation='relu'))
    top_model.add(Dropout(0.5))
    top_model.add(Dense(nb_class, activation='softmax'))

    model = Model(input=vgg16_model.input, output=top_model(vgg16_model.output))

    #--- set the first 25 layers (up to the last conv block)
    #--- to non-trainable (weights will not be updated)
    #for layer in model.layers[:25]:
    #    layer.trainable = False

    #model.load_weights(os.path.join(result_dir, ckpt_file))
    model.summary()

    model.compile(loss='categorical_crossentropy',
              optimizer=optimizers.SGD(lr=1e-4, momentum=0.9),
              metrics=['accuracy'])



    train_datagen = ImageDataGenerator(
        rescale=1.0 / 255,
        rotation_range=20,
        width_shift_range=0.1,
        height_shift_range=0.1,
        #zoom_range=0.2,
        #vertical_flip=True,
        #horizontal_flip=True,
        #channel_shift_range=0.2,
        #shear_range=0.1
    )

    test_datagen = ImageDataGenerator(
        rescale=1.0 / 255
    )

    train_generator = train_datagen.flow_from_directory(
        train_dir,
        target_size=(h, w),
        batch_size=32,
        class_mode='categorical')
        #class_mode='binary')

    validation_generator = test_datagen.flow_from_directory(
        valid_dir,
        target_size=(h, w),
        batch_size=32,
        class_mode='categorical')
        #class_mode='binary')

    print(train_generator.class_indices)
    with open('class_indices.json', 'w') as f:
        json.dump(train_generator.class_indices, f,
             indent=4,
             sort_keys=True)

    # training
    ckpt = ModelCheckpoint(filepath=ckpt_file, verbose=1, save_best_only=True)

    history = model.fit_generator(
        train_generator,
        samples_per_epoch=100,
        nb_epoch=nb_epoch,
        validation_data=validation_generator,
        nb_val_samples=50,
        callbacks=[ckpt])

    # save resutls
    model.save_weights(os.path.join(result_dir, 'ckpt-weight-last.h5'))
    save_history(history, os.path.join(result_dir, 'ckpt-history.txt'))

Генерирует (запустите приведенный выше код):

Найдено 14830 изображений, относящихся к 493 классам. Найдено 9890 изображений, относящихся к 493 классам.

Я должен сгенерировать:

Найдено 14790 изображений, относящихся к 493 классам. Найдено 9860 изображений, относящихся к 493 классам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...