# Train AlexNet over ImageNet Convolution neural network (CNN) is a type of feed-forward neural network widely used for image and video classification. In this example, we will use a [deep CNN model](http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks) to do image classification against the ImageNet dataset. ## Instructions ### Compile SINGA Please compile SINGA with CUDA, CUDNN and OpenCV. You can manually turn on the options in CMakeLists.txt or run `ccmake ..` in build/ folder. We have tested CUDNN V4 and V5 (V5 requires CUDA 7.5) ### Data download * Please refer to step1-3 on [Instructions to create ImageNet 2012 data](https://github.com/amd/OpenCL-caffe/wiki/Instructions-to-create-ImageNet-2012-data) to download and decompress the data. * You can download the training and validation list by [get_ilsvrc_aux.sh](https://github.com/BVLC/caffe/blob/master/data/ilsvrc12/get_ilsvrc_aux.sh) or from [Imagenet](http://www.image-net.org/download-images). ### Data preprocessing * Assuming you have downloaded the data and the list. Now we should transform the data into binary files. You can run: sh create_data.sh The script will generate a test file(`test.bin`), a mean file(`mean.bin`) and several training files(`trainX.bin`) in the specified output folder. * You can also change the parameters in `create_data.sh`. + `-trainlist `: the file of training list; + `-trainfolder `: the folder of training images; + `-testlist `: the file of test list; + `-testfolder `: the folder of test images; + `-outdata `: the folder to save output files, including mean, training and test files. The script will generate these files in the specified folder; + `-filesize `: number of training images that stores in each binary file. ### Training * After preparing data, you can run the following command to train the Alexnet model. sh run.sh * You may change the parameters in `run.sh`. + `-epoch `: number of epoch to be trained, default is 90; + `-lr `: base learning rate, the learning rate will decrease each 20 epochs, more specifically, `lr = lr * exp(0.1 * (epoch / 20))`; + `-batchsize `: batchsize, it should be changed regarding to your memory; + `-filesize `: number of training images that stores in each binary file, it is the same as the `filesize` in data preprocessing; + `-ntrain `: number of training images; + `-ntest `: number of test images; + `-data `: the folder which stores the binary files, it is exactly the output folder in data preprocessing step; + `-pfreq `: the frequency(in batch) of printing current model status(loss and accuracy); + `-nthreads `: the number of threads to load data which feed to the model.