我用imagenet-weights训练了一个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
发布于 2019-06-03 01:19:12
我假设你的数据有一个占整个集合33%的类?如果这是真的,那么在first run:
中发生的情况是模型根本没有学习到任何东西(acc: 0.3365
)。
这可能是因为不正确地使用了数据增强,如果注释行是您在第一次运行中使用的,那么它们就是罪魁祸首。
#shear_range=0.9
和#zoom_range=0.9
太多了,其中只有一个意味着您对每个图像的90%不一致,因此模型不会学习任何东西。
https://stackoverflow.com/questions/56416190
复制相似问题