在Cifar-10上训练CNN¶
卷积神经网络(CNN)是一种被广泛用于图像和视频分类的前馈人造神经网络。在此例子中,我们将在Cifar-10数据集上训练三个深度CNN模型来进行图像分类,
AlexNet,我们在验证集上能达到的最高准确度(不做数据增强)在82%左右。
VGGNet,我们在验证集上能达到的最高准确度(不做数据增强)在89%左右。
ResNet,我们在验证集上能达到的最高准确度(不做数据增强)在83%左右。
来自Caffe的AlexNet,SINGA能够无缝转换Caffe模型。
操作说明¶
SINGA安装¶
用户可以从源码编译和安装C++或者Python版本的SINGA。代码可以在CPU和GPU上执行。对于GPU上做训练,CUDA和CUDNN(V4或V5)是需要的。请参考安装界面以获得详细指示。
数据准备¶
Cifar-10的二进制数据集文件可以由如下指令下载
python download_data.py bin
Python版本可以由如下指令下载
python download_data.py py
训练¶
这里有4个训练程序
1.train.py。下面的指令将会用’cifar-10-batches-py’底下的python版本的Cifar-10数据集训练VGG模型。
python train.py vgg cifar-10-batches-py
要训练其他模型,请用’alexnet’,’resnet’或’caffe’替换’vgg’。其中,’caffe’指由caffe的AlexNet转换的模型。默认情况下,模型将在CudaGPU设备上训练;若想要在CppCPU上运行,需添加额外的参数
python train.py vgg cifar-10-batches-py --use_cpu
2.alexnet.cc。它通过调用CPP API在CudaGPU上训练AlexNet模型。
./run.sh
3.alexnet-parallel.cc。它通过调用CPP API在两个CudaGPU上训练AlexNet模型。两个设备上同时运行并计算模型参数的梯度,然后它们会在CPU设备上取平均并用于更新参数。
./run-parallel.sh
4.vgg-parallel.cc。它调用CPP API在两个CudaGPU设备上训练VGG模型,同alexnet-parallel.cc类似。
预测¶
predict.py包含预测函数
def predict(net, images, dev, topk=5)
net通过加载先前训练好的模型来被创建;images包含图像的numpy数组(每张图像一行);dev是训练时的设备,例如,一个CudaGPU设备或者CppCPU设备;它将返回每个实例的topk标签。
Predict.py文件主函数提供了用预训练的模型为新图片做预测的例子。’mode.bin’文件由训练程序生成,需要被放置在cifar目录下执行
python predict.py