第一个 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 结束时卡住了几秒钟
训练神经网络时,Tensorflow 完成后会自动恢复到最佳 epoch 吗?