第一个 epoch 完成后模型训练卡住了……第二个 epoch 甚至不会开始,也不会抛出任何错误,它只是保持空闲

Posted

技术标签:

【中文标题】第一个 epoch 完成后模型训练卡住了……第二个 epoch 甚至不会开始,也不会抛出任何错误,它只是保持空闲【英文标题】:model training got stuck after first epoch got completed...2nd epoch won't even start and not throwing any error too it justs stay idle 【发布时间】:2021-06-21 18:04:46 【问题描述】:

显示模型训练停留在 epoch 1 且未抛出错误的屏幕截图

我正在使用 google colab pro,这是我的代码 sn-p

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])

张量流版本-2.4.1 keras 版本-2.4.0

我正在使用大约 15k 图像数据集和 58k 参数进行训练。我也使用了图像数据生成器,但是当尝试训练模型时,它完成了它的第一个 epoch,但第二个 epoch 无法启动它卡住了,但它没有抛出任何错误,它只是保持空闲状态。

【问题讨论】:

【参考方案1】:

我发现由于数据集和 60k 参数,验证集在第一个 epoch 的模型训练中花费了很长时间,因为默认冗长我没有看到... 所以我所做的是我将图像大小从 260 260 减少到 180180,这将我的参数从 60k 减少到 29k 并再次训练我的模型,但这次我等了 30 分钟 @987654321训练集完成后,@validation 集(由于详细 1 默认值,我看不到信息)。 在附加的图片中,您可以看到它说第一个时期为 5389 秒(89 分钟),但它唯一的训练数据集时间并没有加起来验证时间,这大约需要 30 分钟......所以如果你看到你的模型在之后卡住了训练数据集..等待,因为验证数据将被执行......或使用详细 =2

【讨论】:

以上是关于第一个 epoch 完成后模型训练卡住了……第二个 epoch 甚至不会开始,也不会抛出任何错误,它只是保持空闲的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow 在每个 epoch 结束时卡住了几秒钟

为啥 Keras 损失在第一个 epoch 之后急剧下降?

模型执行后清除 TensorFlow GPU 内存

训练神经网络时,Tensorflow 完成后会自动恢复到最佳 epoch 吗?

使用 Keras 训练 CNN-LSTM 时卡在第一个 epoch

我的铁人三项训练计划