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_Keras - Fatal编程技术网

Python 对于同一keras模型,我得到了不同的结果

Python 对于同一keras模型,我得到了不同的结果,python,keras,Python,Keras,我训练了一个带有图像净重的VGG16,将图像分成4类 列车数据:4类3578幅图像。 验证数据:894幅图像,分为4类 每次运行代码时,我都会得到这两个精度值中的一个。val_acc:第一次运行时为1.0000。val_acc:第二次运行时为0.3364 有什么解释吗?因为结果之间的差异太大了 train_dir = 'C:/Users/ucduq/Desktop/output1/train' validation_dir = 'C:/Users/ucduq/Desktop/ou

我训练了一个带有图像净重的VGG16,将图像分成4类

列车数据:4类3578幅图像。 验证数据: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

我假设您的数据中有一个类占整个集合的33%?如果这是真的,那么在
第一次运行时发生的情况是:
模型根本没有学到任何东西(
acc:0.3365

这可能是因为不正确地使用了数据扩充,如果注释行是您在第一次运行中使用的,那么它们就是罪魁祸首

#剪切力范围=0.9
#缩放范围=0.9

太多了,这其中只有一个意味着你对每幅图像的90%不协调,因此模型什么也学不到。

信息太少。您最好提供用于培训的所有代码。你所说的经验1或经验2是什么意思?你是如何预处理的。仅仅给出这几行代码是不可能告诉任何事情的。我已经添加了整个代码。我的意思是exp_1和exp_2:第一次运行和第二次运行。区别在于,这两种情况下使用的验证数据不同。您已为验证数据启用“重新缩放”。理想情况下,验证数据不应该有任何数据扩充。如果您还希望增加验证数据,请在运行期间为随机增加过程设定种子。然而,建议不增加验证数据