使用自动多GPU支持的列车网络
要求
目录=pwd; [locationCifar10Train,locationCifar10Test]=下载CIFARToFolders(目录);
正在下载CIFAR-10数据集。。。 完成。 正在将CIFAR-10复制到文件夹。。。 完成。
加载数据集
imdsTrain=图像数据存储(locationCifar10Train, ... IncludeSubfolders=true, ... 标签源= “文件夹名” ); imdsTest=图像数据存储(locationCifar10Test, ... IncludeSubfolders=true, ... 标签源= “文件夹名” );
imageSize=[32 32 3]; 像素范围=[-4 4]; imageAugmenter=图像数据增强器( ... RandXReflection=真, ... RandXTranslation=像素范围, ... RandYTranslation=像素范围); augmentedImdsTrain=增强的图像数据存储(imageSize,imdsTrain, ... DataAugmentation=imageAugmenter);
定义网络架构和培训选项
块深度=4; %blockDepth控制卷积块的深度。 净宽度=32; %netWidth控制卷积块中过滤器的数量。 层=[ imageInputLayer(imageSize) 卷积块(netWidth,blockDepth) maxPooling2dLayer(2,步幅=2) 卷积块(2*netWidth,blockDepth) maxPooling2dLayer(2,步幅=2) 卷积块(4*netWidth,blockDepth) 平均池2层(8) 全连接层(10) softmaxLayer];
通过将执行环境设置为“ 多gpu“ 。使用多个GPU时,会增加可用的计算资源。 根据GPU的数量扩大迷你背带的大小,以保持每个GPU上的工作负载不变。 在本例中,GPU的数量是两个。 根据迷你背带大小调整学习速度。 在GPU上进行培训需要Parallel Computing Toolbox™许可证和受支持的GPU设备。 有关支持的设备的信息,请参阅 GPU计算要求 (并行计算工具箱) . 随着培训的进行,使用学习率时间表来降低学习率。 打开培训进度图,以在培训期间获得视觉反馈。
numGPU=gpuDeviceCount( “可用” )
numGPU=4个
miniBatchSize=256*个GPU; initialLearnRate=1e-1*miniBatchSize/256; options=培训选项( “sgdm” , ... 执行环境= “多gpu” , ... %启用自动多gpu支持。 InitialLearnRate=初始学习速率, ... %设置初始学习速率。 MiniBatchSize=迷你批次大小, ... %设置MiniBatchSize。 详细=错误, ... %不发送命令行输出。 绘图= “培训进度” , ... %打开培训进度图。 指标= “准确性” , ... L2正则化=1e-10, ... MaxEpochs=60, ... 随机播放= “每个人” , ... 验证数据=imdsTest, ... ValidationFrequency=楼层(numel(imdsTrain.Files)/miniBatchSize), ... 学习率计划= “分段” , ... 学习率下降系数=0.1, ... LearnRateDropPeriod=50);
列车网络和分类使用
net=列车网络(增强的ImdsTrain,层, “交叉熵” ,选项);
classes=类别(imdsTest.Labels); 分数=minibatchpredict(net,imdsTest); Y=分数2标签(分数、等级);
准确性=总和(Y==imdsTest.Labels)/numel(imdsTest.Nabels)
精度=0.8879
定义助手函数
功能 layers=卷积块(numFilters,numConvLayers) 层=[ 卷积2dLayer(3,numFilters,Padding= “相同” ) 批处理规范化层 reluLayer]; layers=repmat(层,numConvLayers,1); 结束