CNN二分类任务中偶数训练轮次结果异常(准确率与损失均为0)的求助
CNN二分类任务中偶数训练轮次结果异常(准确率与损失均为0)的求助
我正在做一个基于CNN的汽车/卡车二分类任务,但遇到了非常奇怪的问题:所有偶数轮次的训练结果都完全异常,准确率和损失值都是0,不管我调整epochs的数量,这个现象一直存在。以下是我的完整代码和训练时的输出结果,希望各位能帮我排查一下问题所在!
我的代码
import os import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import tensorflow as tf import kagglehub data_dir = kagglehub.dataset_download("ryanholbrook/car-or-truck") from tensorflow.keras.preprocessing.image import ImageDataGenerator tf.random.set_seed(42) train_datagen = ImageDataGenerator(rescale=1./255) valid_datagen = ImageDataGenerator(rescale=1./255) train_dir = "/root/.cache/kagglehub/datasets/ryanholbrook/car-or-truck/versions/1/train/" test_dir = "/root/.cache/kagglehub/datasets/ryanholbrook/car-or-truck/versions/1/valid/" train_data = train_datagen.flow_from_directory(directory = train_dir, batch_size=32, target_size=(224,224), class_mode="binary", seed=42, shuffle =True) valid_data = valid_datagen.flow_from_directory(directory = test_dir, batch_size=32, target_size=(224,224), class_mode="binary", seed=42, shuffle =True) model_1 = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(filters=10, kernel_size=3, input_shape=(224,224,3), activation="relu"), tf.keras.layers.Conv2D(10,3, activation="relu"), tf.keras.layers.MaxPool2D(pool_size=2, padding="valid"), tf.keras.layers.Conv2D(10,3, activation="relu"), tf.keras.layers.Conv2D(10,3, activation="relu"), tf.keras.layers.MaxPool2D(pool_size=2, padding="valid"), tf.keras.layers.Flatten(), tf.keras.layers.Dense(1, activation="sigmoid") ]) # Compile our CNN model_1.compile(loss="binary_crossentropy", optimizer=tf.keras.optimizers.Adam(), metrics=["accuracy"]) # Fit the CNN to the data history_1 = model_1.fit(train_data, epochs=25, steps_per_epoch=len(train_data), validation_data=valid_data, validation_steps=len(valid_data))
训练输出结果
Found 5117 images belonging to 2 classes. Found 5051 images belonging to 2 classes. Epoch 1/25 /usr/local/lib/python3.10/dist-packages/keras/src/layers/convolutional/base_conv.py:107: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead. super().__init__(activity_regularizer=activity_regularizer, **kwargs) /usr/local/lib/python3.10/dist-packages/keras/src/trainers/data_adapters/py_dataset_adapter.py:122: UserWarning: Your `PyDataset` class should call `super().__init__(**kwargs)` in its constructor. `**kwargs` can include `workers`, `use_multiprocessing`, `max_queue_size`. Do not pass these arguments to `fit()`, as they will be ignored. self._warn_if_super_not_called() 160/160 ━━━━━━━━━━━━━━━━━━━━ 18s 93ms/step - accuracy: 0.6169 - loss: 0.6532 - val_accuracy: 0.6391 - val_loss: 0.6453 Epoch 2/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 0s 109us/step - accuracy: 0.0000e+00 - loss: 0.0000e+00 Epoch 3/25 /usr/lib/python3.10/contextlib.py:153: UserWarning: Your input ran out of data; interrupting training. Make sure that your dataset or generator can generate at least `steps_per_epoch * epochs` batches. You may need to use the `.repeat()` function when building your dataset. self.gen.throw(typ, value, traceback) 160/160 ━━━━━━━━━━━━━━━━━━━━ 17s 80ms/step - accuracy: 0.6780 - loss: 0.5921 - val_accuracy: 0.7020 - val_loss: 0.5711 Epoch 4/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 4s 26ms/step - accuracy: 0.0000e+00 - loss: 0.0000e+00 Epoch 5/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 13s 81ms/step - accuracy: 0.7679 - loss: 0.4824 - val_accuracy: 0.7193 - val_loss: 0.5556 Epoch 6/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 4s 25ms/step - accuracy: 0.0000e+00 - loss: 0.0000e+00 Epoch 7/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 18s 88ms/step - accuracy: 0.8320 - loss: 0.3964 - val_accuracy: 0.7242 - val_loss: 0.5764 Epoch 8/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 4s 25ms/step - accuracy: 0.0000e+00 - loss: 0.0000e+00 Epoch 9/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 15s 78ms/step - accuracy: 0.8764 - loss: 0.3101 - val_accuracy: 0.6995 - val_loss: 0.6768 Epoch 10/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 0s 93us/step - accuracy: 0.0000e+00 - loss: 0.0000e+00 Epoch 11/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 13s 80ms/step - accuracy: 0.9233 - loss: 0.2111 - val_accuracy: 0.7145 - val_loss: 0.7014 Epoch 12/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 0s 97us/step - accuracy: 0.0000e+00 - loss: 0.0000e+00 Epoch 13/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 13s 77ms/step - accuracy: 0.9491 - loss: 0.1485 - val_accuracy: 0.7123 - val_loss: 0.8927 Epoch 14/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 5s 31ms/step - accuracy: 0.0000e+00 - loss: 0.0000e+00 Epoch 15/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 16s 82ms/step - accuracy: 0.9814 - loss: 0.0733 - val_accuracy: 0.7104 - val_loss: 1.1305 Epoch 16/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 0s 71us/step - accuracy: 0.0000e+00 - loss: 0.0000e+00 Epoch 17/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 20s 80ms/step - accuracy: 0.9903 - loss: 0.0431 - val_accuracy: 0.7143 - val_loss: 1.3878 Epoch 18/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 0s 98us/step - accuracy: 0.0000e+00 - loss: 0.0000e+00 Epoch 19/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 20s 80ms/step - accuracy: 0.9915 - loss: 0.0323 - val_accuracy: 0.7165 - val_loss: 1.5466 Epoch 20/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 4s 26ms/step - accuracy: 0.0000e+00 - loss: 0.0000e+00 Epoch 21/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 15s 75ms/step - accuracy: 0.9967 - loss: 0.0177 - val_accuracy: 0.7058 - val_loss: 1.6167 Epoch 22/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 0s 144us/step - accuracy: 0.0000e+00 - loss: 0.0000e+00 Epoch 23/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 21s 79ms/step - accuracy: 0.9939 - loss: 0.0196 - val_accuracy: 0.7111 - val_loss: 1.7555 Epoch 24/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 0s 97us/step - accuracy: 0.0000e+00 - loss: 0.0000e+00 Epoch 25/25 160/160 ━━━━━━━━━━━━━━━━━━━━ 15s 90ms/step - accuracy: 0.9942 - loss: 0.0211 - val_accuracy: 0.7076 - val_loss: 1.9112
备注:内容来源于stack exchange,提问作者Ayush Kacholiya
相关产品推荐
相关产品推荐

