CNN предсказывает один и тот же класс каждый разPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 CNN предсказывает один и тот же класс каждый раз

Сообщение Anonymous »

Я попытался построить CNN с нуля и проверить его в наборе данных Village, он имеет 96% точности и точность валидации 93%, но когда я пытаюсь проверить его с изображениями тестирования, всегда прогнозируя один и тот же класс ... но с другой стороны, он правильно оцениваю, если я использую набор валидации. />

Код: Выделить всё

trainDf = tf.keras.preprocessing.image_dataset_from_directory(
trainDir,
image_size=(64, 64),
batch_size=8,
shuffle=True,
labels="inferred"
)

valDf = tf.keras.preprocessing.image_dataset_from_directory(
valDir,
image_size=(64, 64),
batch_size=8,
shuffle=False,
labels="inferred"
)
< /code>
увеличение: < /p>

rescale_and_resize = tf.keras.Sequential([
layers.Resizing(64, 64),
layers.Rescaling(1./255)
])

data_augmentation = tf.keras.Sequential([
layers.RandomFlip("horizontal_and_vertical"),
layers.RandomRotation(0.1),
layers.RandomZoom(0.1),
layers.RandomTranslation(0.1, 0.1),
layers.RandomContrast(0.1),
])
< /code>
Модель: < /p>
#Model
model = models.Sequential([
rescale_and_resize,
data_augmentation,

layers.Conv2D(32, 3, activation='relu', padding='same'),
layers.BatchNormalization(),
layers.MaxPooling2D(),

layers.Conv2D(64, 3, activation='relu', padding='same'),
layers.BatchNormalization(),
layers.MaxPooling2D(),

layers.Conv2D(128, 3, activation='relu', padding='same'),
layers.BatchNormalization(),
layers.MaxPooling2D(),

layers.Conv2D(128, 3, activation='relu', padding='same'),
layers.BatchNormalization(),
layers.MaxPooling2D(),

layers.Conv2D(256, 3, activation='relu', padding='same'),
layers.BatchNormalization(),
layers.MaxPooling2D(),

layers.Flatten(),
layers.Dropout(0.5),
layers.Dense(38)
])

model.compile(
optimizer=tf.keras.optimizers.Adam(1e-4),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy']
)

model.summary()

stop_early = tf.keras.callbacks.EarlyStopping(
monitor='val_loss',
patience=5,
restore_best_weights=True
)

#Training the model

history = model.fit(
trainDf,
validation_data=valDf,
epochs=50,
callbacks=[stop_early]
)

model.save("model1.keras")
< /code>
Сводка модели после обучения:  < /p>
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type)                    ┃ Output Shape           ┃       Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ sequential (Sequential)         │ (None, 64, 64, 3)      │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ sequential_1 (Sequential)       │ (None, 64, 64, 3)      │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d (Conv2D)                 │ (None, 64, 64, 32)     │           896 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ batch_normalization             │ (None, 64, 64, 32)     │           128 │
│ (BatchNormalization)            │                        │               │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d (MaxPooling2D)    │ (None, 32, 32, 32)     │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_1 (Conv2D)               │ (None, 32, 32, 64)     │        18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ batch_normalization_1           │ (None, 32, 32, 64)     │           256 │
│ (BatchNormalization)            │                        │               │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_1 (MaxPooling2D)  │ (None, 16, 16, 64)     │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_2 (Conv2D)               │ (None, 16, 16, 128)    │        73,856 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ batch_normalization_2           │ (None, 16, 16, 128)    │           512 │
│ (BatchNormalization)            │                        │               │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_2 (MaxPooling2D)  │ (None, 8, 8, 128)      │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_3 (Conv2D)               │ (None, 8, 8, 128)      │       147,584 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ batch_normalization_3           │ (None, 8, 8, 128)      │           512 │
│ (BatchNormalization)            │                        │               │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_3 (MaxPooling2D)  │ (None, 4, 4, 128)      │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_4 (Conv2D)               │ (None, 4, 4, 256)      │       295,168 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ batch_normalization_4           │ (None, 4, 4, 256)      │         1,024 │
│ (BatchNormalization)            │                        │               │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_4 (MaxPooling2D)  │ (None, 2, 2, 256)      │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten (Flatten)               │ (None, 1024)           │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout (Dropout)               │ (None, 1024)           │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense (Dense)                   │ (None, 38)             │        38,950 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Обучение остановилось здесь:
Epoch 24/50
8787/8787 ━━━━━━━━━━━━━━━━━━━━ 630S 72 мс/Шаг - Точность: 0.9667 - Потеря: 0,0985 - IM -al_accuracy: 0.9380 - val_loss: 0.1975 hazcuracy. Данные: < /p>

Код: Выделить всё

model = keras.models.load_model("model1.keras")

imgs=[os.path.join(testDir,fpath) for fpath in os.listdir(testDir)]
images=[]
for path in imgs:
img = image.load_img(path,target_size=(64,64))
arr=image.img_to_array(img)
arr=arr/255.0
images.append(arr)

images=np.array(images)

pred=model.predict(images)
p=np.argmax(pred,axis=1)
print(p)
Но вывод:
2/2 ━━━━━━━━━━━━━━━━━━━━ 0s 168ms/step
[8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8]>

Подробнее здесь: https://stackoverflow.com/questions/797 ... -everytime
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»