Я получаю другой результат для той же модели керас - PullRequest
0 голосов
/ 02 июня 2019

Я тренировал VGG16 с imagenet-гирями, чтобы классифицировать изображения с 4 классами.

Данные поезда: 3578 изображений, относящихся к 4 классам.Данные проверки: 894 изображения, принадлежащие 4 классам

Каждый раз, когда я запускаю код, я получаю одно из этих двух значений точности.val_acc: 1.0000 при первом запуске.val_acc: 0,3364 во втором запуске.

Есть объяснение этому?потому что разница между результатами очень велика.

    train_dir = 'C:/Users/ucduq/Desktop/output1/train'
    validation_dir = 'C:/Users/ucduq/Desktop/output1/val'

        training_data_generator = ImageDataGenerator(
            rescale=1./255,
        #rotation_range=90,
        #horizontal_flip=True,
       # vertical_flip=True,
        #shear_range=0.9
        #zoom_range=0.9

        )

    validation_data_generator = ImageDataGenerator(rescale=1./255)

        IMAGE_WIDTH=150
        IMAGE_HEIGHT=150
    BATCH_SIZE=32
    input_shape=(150,150,3)

    training_generator = training_data_generator.flow_from_directory(
        train_dir,
        target_size=(IMAGE_WIDTH, IMAGE_HEIGHT),
        batch_size=BATCH_SIZE,
        class_mode="categorical")
    validation_generator = validation_data_generator.flow_from_directory(
        validation_dir,
        target_size=(IMAGE_WIDTH, IMAGE_HEIGHT),
        batch_size=BATCH_SIZE,
        class_mode="categorical",
        shuffle=False)


    from keras.applications import VGG16

    vgg_conv = VGG16(weights='imagenet',
                      include_top=False,
                      input_shape=(150, 150, 3))


    model = models.Sequential()


    model.add(vgg_conv)

    ### Add new layers
    model.add(layers.Flatten())
    model.add(layers.Dense(1024, activation='relu'))
    model.add(layers.Dropout(0.5))
    model.add(layers.Dense(4, activation='softmax'))

model.compile(loss="categorical_crossentropy",optimizer='adam',metrics=["accuracy"])

results = model.fit_generator(training_generator, steps_per_epoch=training_generator.samples/training_generator.batch_size, 
                                  epochs=100,
                                  callbacks=callbacks,
                                  validation_data=validation_generator, validation_steps=28)

    first run:

    Epoch 100/100

    111/110 [==============================] - 17s 152ms/step - loss: 1.3593 - acc: 0.3365 - val_loss: 1.3599 - val_acc: 0.3364


    second run:

    Epoch 100/100

    111/110 [==============================] - 18s 158ms/step - loss: 1.9879e-06 - acc: 1.0000 - val_loss: 5.2915e-06 - val_acc: 1.0000

1 Ответ

1 голос
/ 02 июня 2019

Я предполагаю, что у ваших данных есть класс, который составляет 33% от всего набора?Если это правда, то, что происходит в first run:, это то, что модель вообще ничего не изучала (acc: 0.3365).

Это может произойти из-за неправильного использования дополнения данных, если закомментированные строки - это то, что вы используете в первом запуске, тогда они являются виновниками.

#shear_range=0.9 и #zoom_range=0.9 - это слишком много, только одно из них означает, что вы отбрасываете 90% каждого изображения, поэтому модель ничего не изучает.

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