TensorFlow CPU版本训练过慢求助:如何提升训练速度?
嘿,针对你的情况我来详细说说~
训练速度会不会一直这么慢?
如果不做任何优化调整,大概率会一直保持这种较慢的状态。毕竟你的硬件配置(三代Core i5 3340M + 4GB内存)加上TensorFlow CPU版本的组合,本身就不是为深度学习训练量身打造的;而且你已经用到了batch size=1,这已经是最小的批次设置了,没法通过进一步减小批次来提升单步训练的速度。
这些优化方法能帮你加快训练进程
提前完成图像预处理并缓存
别在训练循环里实时做图像加载、缩放、归一化这些操作,先把所有图像一次性预处理好(比如转成numpy数组或者TFRecord格式)存到本地,训练时直接读取处理后的文件。也可以用tf.data.Dataset的cache()方法,第一次加载后把数据缓存到内存(内存够的话)或磁盘,后续迭代直接取缓存,能省不少CPU计算资源。简化模型结构
如果你用的是比较深的网络(比如ResNet50这类),换成轻量化模型比如MobileNetV2、SqueezeNet会好很多;也可以手动调整模型,比如减少卷积层的数量、降低每个卷积层的滤波器数量(比如从64个改成32个),或者把大的全连接层换成全局平均池化层,这样模型参数和计算量都会大幅下降,训练速度自然提上来。优化训练循环的执行效率
用tf.function装饰你的训练步骤函数,TensorFlow会把Python代码转换成计算图,执行效率会高很多。示例代码如下:@tf.function def train_step(image, label): with tf.GradientTape() as tape: predictions = model(image) loss = loss_object(label, predictions) gradients = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(gradients, model.trainable_variables)) train_loss(loss) train_accuracy(label, predictions)另外,暂时关闭实时验证(比如每训练几个epoch再跑一次验证),也能减少不必要的计算消耗。
优化内存使用避免拖慢速度
4GB内存不算充裕,训练时关掉其他无关软件,释放内存空间,避免系统因内存不足启用虚拟内存(虚拟内存速度比物理内存慢太多)。同时给tf.data.Dataset加上prefetch(tf.data.AUTOTUNE),让数据加载和模型计算并行进行,不会因为等数据卡住训练。尝试量化训练
TensorFlow支持整数量化或浮点量化,量化后的模型体积更小、计算更快,虽然会有一点点精度损失,但对于小数据集来说,这种损失通常在可接受范围内。你可以用tf.keras.models.Model.quantize()或者在训练完成后做量化转换。
内容的提问来源于stack exchange,提问作者usamagk




