keras 的问题,模型无法从验证中学习

时间:2021-03-10 14:55:44

标签: tensorflow keras

我是 keras 新手,我试图用一组卫星图像构建一个序列模型,其中包含 26 个类,但函数 model.fit_generator 无法识别验证数据,我更改了所有内容,我即将留下这个问题。我的代码是:

_URL = 'https://storage.googleapis.com/kaggle-competitions-data/kaggle-v2/25487/2041232/bundle/archive.zip?GoogleAccessId=web-data@kaggle-161607.iam.gserviceaccount.com&Expires=1615640732&Signature=SVgNSgLgSEzKPYDQZQWiv33ytl6vG1JbWvKqwpIjDoN378hhv99U9NyB3MiyKeQ9bteaatA4hEAGndftP3AR%2B%2FpeHfjwjuOehvjHqaJHYqyKoGcCldDkROwu9C8sYuWV2beC5anxkShel401etLXSmumw%2FvMsfHoXqRSAd4Es0vVJZQ%2Bymmd9Ir9CqIamfxjbztl0cJYB69LfTHuxyicZmoyKbyWIQ%2BmQXXWn5QzobTJX9kOh9nKQF1hBbXeAGOpxZMAS1nCdBWKfCIRlhfY2PlacIcR1MMm1LFjSx82X0lGjjNTGf2CCOYZQAxxhjIfZuBU4U%2Bhx4JP9ClW7s%2BTFw%3D%3D&response-content-disposition=attachment%3B+filename%3Dusos-del-suelo-con-sentinel-2.zip'

path_to_zip = tf.keras.utils.get_file('usos-del-suelo-con-sentinel-2.zip', origin=_URL, extract=True)

PATH = os.path.join(os.path.dirname(path_to_zip))

train_dir = os.path.join(PATH, 'LULC_100samples2021/LULC_100samples2021_Jan_JPG')
test_dir = os.path.join(PATH, 'Test')

batch_size = 20
epochs = 10
IMG_HEIGHT = 224
IMG_WIDTH = 224

image_generator = ImageDataGenerator(validation_split = 0.2, rescale=1./255) 
test_image_generator = ImageDataGenerator(rescale=1./255)

train_data_gen = image_generator.flow_from_directory(batch_size=batch_size,
                                                     directory=train_dir,
                                                     class_mode="categorical",
                                                     subset='training',
                                                     target_size=(IMG_HEIGHT, IMG_WIDTH),
                                                     shuffle=True)

val_data_gen = image_generator.flow_from_directory(batch_size=batch_size,
                                                   directory=train_dir,
                                                   subset='validation',
                                                   class_mode="categorical",
                                                   target_size=(IMG_HEIGHT, IMG_WIDTH),
                                                   shuffle=False)

model = Sequential([
    Conv2D(16, 3, padding='same', activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH ,3)),
    MaxPooling2D(),
    Conv2D(32, 3, padding='same', activation='relu'),
    MaxPooling2D(),
    Conv2D(64, 3, padding='same', activation='relu'),
    MaxPooling2D(),
    Flatten(),
    Dense(128, activation='relu'),
    Dense(1)
])

model.compile(loss=tf.keras.losses.CategoricalCrossentropy(), optimizer = "adam", metrics = ["accuracy"])

train_samples=2080
val_samples=520

history = model.fit_generator(
    train_data_gen,
    steps_per_epoch = train_samples // batch_size,
    validation_data = val_data_gen,
    validation_steps = val_samples // batch_size,
    epochs=epochs
)

我的问题是:准确性在任何时期都不会改变,所以我想我的模型无法识别验证数据。当我尝试预测测试标签时,输出是一个 0 向量,因此我无法预测任何内容。

0 个答案:

没有答案