如何加速这个CNN训练的建议?

我一直在训练一个神经网络,用于识别手写纸张和绘图纸张之间的差异。我的图像尺寸都是(3508, 2480),我使用CNN来完成这项任务,问题是训练花费的时间太长了。我有30,000张数据,分为两类,并分为验证和训练集,因此我有:

  • 13650张手写段落的训练图像
  • 13650张绘图的训练图像
  • 1350张绘图的验证图像
  • 1250张绘图的验证图像

如果你想查看我的架构,这里是我的

summary()

这是我的代码:

import tensorflow as tfimport osimport matplotlib.pyplot as pltimport matplotlib.image as mpimgimport numpy as npfrom google.colab import drivedrive.mount('/content/drive')
l0 = tf.keras.layers.Conv2D(32, (60,60), activation='relu', input_shape=(438, 310, 1), name='input')l1 = tf.keras.layers.Dropout(.3)l2 = tf.keras.layers.BatchNormalization()l3 = tf.keras.layers.MaxPool2D(pool_size=(2,2),padding='same')l12 = tf.keras.layers.Flatten()l16 = tf.keras.layers.Dense(32, activation='relu')l17 = tf.keras.layers.Dropout(.5)l18 = tf.keras.layers.BatchNormalization()l22 = tf.keras.layers.Dense(1, activation='sigmoid', name='output')
from keras.preprocessing.image import ImageDataGeneratortrdata = ImageDataGenerator(rescale=1/255)traindata = trdata.flow_from_directory("/content/drive/MyDrive/Sae/TesisProgra/DataSets/ParagraphsVsDrawings/Paste/0_Final/Training",target_size=(438, 310), color_mode="grayscale", batch_size=250)valdata = ImageDataGenerator(rescale=1/255)validationdata = valdata.flow_from_directory("/content/drive/MyDrive/Sae/TesisProgra/DataSets/ParagraphsVsDrawings/Paste/0_Final/Validation",target_size=(438, 310), color_mode="grayscale", batch_size=250)
from keras.callbacks import ModelCheckpoint, EarlyStoppingcheckpoint = ModelCheckpoint("ParagraphsVsDrawings.h5", monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=False, save_freq='epoch', mode='auto')history = model.fit(traindata, validation_data=validationdata, validation_steps=10,epochs=20, verbose=True, callbacks=[checkpoint])

我在使用Google Colab PRO进行训练,并启用了TPU和大内存选项

我之前训练过CNN,它们训练得非常快,我不知道是不是因为我的图像太大,也许我可以尝试用pillow调整大小,但我现在真的迷失了方向,我已经等了12个小时,它还在第一轮训练


回答:

你的卷积核大小60×60相当大。尝试使用3×3或5×5的卷积核。看起来图像大小不是问题,因为你已经从(3508, 2480)调整到了(438, 310)。

另外,请注意你的权重数量非常非常大,大约有2400万个。这是因为你将一个(189, 125, 32)形状的数组展平,然后下一层(Dense层)有32个单元,所以那一层有189 * 125 * 32 * 32个权重。这将需要非常非常长的时间来训练。

尝试再添加一到两个卷积层和池化层,以便展平后的权重数量可以管理。

Related Posts

如何对SVC进行超参数调优?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

如何在初始训练后向模型添加训练数据?

我想在我的scikit-learn模型已经训练完成后再…

使用Google Cloud Function并行运行带有不同用户参数的相同训练作业

我正在寻找一种方法来并行运行带有不同用户参数的相同训练…

加载Keras模型,TypeError: ‘module’ object is not callable

我已经在StackOverflow上搜索并阅读了文档,…

在计算KNN填补方法中特定列中NaN值的”距离平均值”时

当我从头开始实现KNN填补方法来处理缺失数据时,我遇到…

使用巨大的S3 CSV文件或直接从预处理的关系型或NoSQL数据库获取数据的机器学习训练/测试工作

已关闭。此问题需要更多细节或更清晰的说明。目前不接受回…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注