对于相同的keras模型,我得到不同的结果

时间:2019-06-02 14:59:30

标签: python keras

我训练了具有图像网络权重的VGG16以对图像进行4类分类。

训练数据:属于4类的3578张图像。 验证数据:共4类894张图像

每次我运行代码时,我都会得到这两个精度值之一。 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 个答案:

答案 0 :(得分:1)

我假设您的数据的类占整个集合的33%?如果是这样,则first run:中发生的事情是该模型根本不了解任何东西(acc: 0.3365)。

这可能是由于不正确使用数据增强,如果注释行是您在第一次运行中使用的行,那么它们就是元凶。

 #shear_range=0.9和  #zoom_range=0.9 太多,仅此一项就意味着您对每张图片都不满意90%,因此该模型不会学到任何东西。

相关问题