2020/5/2-5/5 记录
cpu训练速度慢的可能原因
请参考
深度学习训练速度的提高的一些浅见(1)gpu,cpu,硬盘等硬件
1.【线程】 pytorch以及tensorflow的多线程输入设定过大,一般推荐较大数据流4线程,较小2线程。具体问题具体分析,要看数据输入是否是训练速度优化的瓶颈。
numpy或者opencv等的多线程操作或者tensorflow以及pytorch在cpu运行上的op。这些模块使用OMP或者MKL进行多线程加速,一般默认为cpu线程总数的一半,十分浪费计算力,推荐使用4线程,详见下表。
解决办法:在python文件中加入以下语句,置于顶部,并放在import numpy等的前面,提前声明全局环境变量。
import os
os.environ["MKL_NUM_THREADS"] = '4'
os.environ["NUMEXPR_NUM_THREADS"] = 4'
os.environ["OMP_NUM_THREADS"] = '4'
【2】硬盘IO
【3】内存
VGG训练的主程序train.py主要内容
VGG训练的主程序中主要函数解释
训练的主函数主要包括如下部分:读数据+建模型+设置+训练。
1、读取训练用txt,并打乱,利用该txt进行训练集和测试集的划分。
2、建立VGG16模型,载入权重。这里要注意skip_mismatch=True。
3、利用model.layers[i].trainable = False将VGG16前面的卷积层设置成不可训练。仅训练最后五层。
3、设定模型保存的方式、学习率下降的方式、是否需要早停。
4、利用model.fit_generator训练模型。
str.split函数用法
name= lines [i].split(';')[0] #取每个样本的名字,因为txt文件中是这样存储的“cat.10002.jpg;0”
#str.split(“;”)[0]得到的是第一个;之前的内容
#str.split(“;”)[1]得到的是第一个;和第二个;之间的内容
cv2.imread()
cv2.imread()用于读取图片文件
imread函数有两个参数,第一个参数是图片路径,第二个参数表示读取图片的形式,有三种:
cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1。
cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0。
cv2.IMREAD_UNCHANGED:包括alpha,可以