python - 模型训练在第一个纪元完成后陷入困境...第二个纪元甚至不会启动,也不会抛出任何错误,它只是保持空闲状态

标签 python tensorflow keras conv-neural-network google-colaboratory

屏幕截图显示模型训练停留在第 1 轮且没有抛出错误

enter image description here

我正在使用 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 分钟进行 enter image description here 验证训练集完成后设置(由于默认为 verbose 1,我看不到信息))。 在附图中,您可以看到它表示第一个 epoch 为 5389 秒(89 分钟),但它是唯一的训练数据集时间,它没有添加验证时间,验证时间大约需要 30 分钟......所以如果您看到您的模型在之后卡住了训练数据集...只需等待,因为验证数据将被执行...或使用 verbose =2

关于python - 模型训练在第一个纪元完成后陷入困境...第二个纪元甚至不会启动,也不会抛出任何错误,它只是保持空闲状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66791035/

相关文章:

python - 从另一个列表创建列表 - Python

python - 如何从文本文件中读取逗号分隔值,然后将结果输出到文本文件?

python - 在 Maya 中更改 Python 版本

python - 在 Golang 的 Tensorflow 中打开带有嵌入层的 Keras 模型

python - 运行时警告 : overflow encountered in ubyte_scalars

python - 需要 Google Colab 中 Tensor-board 实现的示例

Python 成员资格运算符 "In"TensorFlow 数据集

python - TensorFlow 无法将字符串转换为数字

python - 我们如何针对任意长度的输入训练深度学习模型?

python - 如何检测 Keras EarlyStopping 发生的纪元?