屏幕截图显示模型训练停留在第 1 轮且没有抛出错误
我正在使用 google colab pro,这是我的代码片段
batch_size = 32
img_height = 256
img_width = 256
train_datagen = ImageDataGenerator(rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
validation_split=0.2) # set validation split
train_generator = train_datagen.flow_from_directory(
data_dir,
target_size=(img_height, img_width),
batch_size=batch_size,
class_mode='categorical',
subset='training') # set as training data
validation_generator = train_datagen.flow_from_directory(
data_dir, # same directory as training data
target_size=(img_height, img_width),
batch_size=batch_size,
class_mode='categorical',
subset='validation') # set as validation data
Found 12442 images belonging to 14 classes.
Found 3104 images belonging to 14 classes.
num_classes = 14
model =Sequential()
chanDim = -1
model.add(Conv2D(16, 3, padding='same', activation='relu', input_shape=(img_height,img_width,3)))
model.add(Activation('relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(3, 3)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(Conv2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(128, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(Conv2D(128, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(Dropout(0.5))
model.add(Dense(num_classes))
model.add(Activation('softmax'))
%tensorflow_version 2.x
import tensorflow as tf
device_name = tf.test.gpu_device_name()
if device_name != '/device:GPU:0':
raise SystemError('GPU device not found')
print('Found GPU at: {}'.format(device_name))
with tf.device('/device:GPU:0'):
model.summary()
Total params: 58,091,918
Trainable params: 58,089,070
Non-trainable params: 2,848
model.compile(optimizer='adam',
loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
checkpoint_path = "/content/drive/MyDrive/model_checkpoints"
checkpoint_dir = os.path.dirname(checkpoint_path)
# Create a callback that saves the model's weights
cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path,
save_weights_only=True,
verbose=1)
epochs=10
history=model.fit(
train_generator,
steps_per_epoch = train_generator.samples // batch_size,
validation_data = validation_generator,
validation_steps = validation_generator.samples // batch_size,
epochs = epochs,
callbacks=[cp_callback])
tensorflow 版本-2.4.1 keras版本-2.4.0
我使用大约 15k 图像数据集和 58k 参数进行训练。我也使用了图像数据生成器,但是当尝试训练模型时,它完成了第一个纪元,但第二个纪元不会启动,它会卡住,但它不会抛出任何错误,它只是保持空闲状态。
最佳答案
我发现由于数据集很大和 60k 参数,验证集在第一个时期的模型训练中花费了很长时间,因为默认的详细信息我没有看到...... 所以我所做的是将图像大小从 260 260 减小到 180180,这将我的参数从 60k 减少到 29k,并再次训练我的模型,但这一次我等待 30 分钟进行 验证训练集完成后设置(由于默认为 verbose 1,我看不到信息))。 在附图中,您可以看到它表示第一个 epoch 为 5389 秒(89 分钟),但它是唯一的训练数据集时间,它没有添加验证时间,验证时间大约需要 30 分钟......所以如果您看到您的模型在之后卡住了训练数据集...只需等待,因为验证数据将被执行...或使用 verbose =2
关于python - 模型训练在第一个纪元完成后陷入困境...第二个纪元甚至不会启动,也不会抛出任何错误,它只是保持空闲状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66791035/