You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@singa.apache.org by ka...@apache.org on 2016/06/27 14:11:53 UTC

[6/6] incubator-singa git commit: SINGA-204 Support the training of feed-forward neural nets

SINGA-204 Support the training of feed-forward neural nets

Merge commits from #xiezl (zhongle) for adding CMake for examples.
To test the cifar10 exmaple,
1. mkdir build && cd build
2. cmake .. && make
3. cd ../examples/cifar10
4. export LD_LIBRARY_PATH=../../build/lib:$LD_LIBRARY_PATH
5. ./run.sh


Project: http://git-wip-us.apache.org/repos/asf/incubator-singa/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-singa/commit/4db968c2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-singa/tree/4db968c2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-singa/diff/4db968c2

Branch: refs/heads/dev
Commit: 4db968c2ec003a051118cf4b49f6ae10cfbc054f
Parents: 97648a6 fce5d81
Author: Wei Wang <wa...@comp.nus.edu.sg>
Authored: Mon Jun 27 19:55:46 2016 +0800
Committer: Wei Wang <wa...@comp.nus.edu.sg>
Committed: Mon Jun 27 19:55:46 2016 +0800

----------------------------------------------------------------------
 CMakeLists.txt                       | 3 ++-
 examples/CMakeLists.txt              | 8 ++++++++
 examples/cifar10/alexnet.cc          | 6 ++----
 examples/cifar10/cifar10.h           | 6 +++---
 examples/cifar10/make.sh             | 1 -
 examples/cifar10/run.sh              | 2 ++
 src/model/feed_forward_net.cc        | 4 +++-
 src/model/layer/cudnn_convolution.cc | 4 ++--
 8 files changed, 22 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/4db968c2/CMakeLists.txt
----------------------------------------------------------------------
diff --cc CMakeLists.txt
index 7a5caf3,21d25cf..ff94d4e
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@@ -20,7 -20,7 +20,7 @@@ INCLUDE_DIRECTORIES(${SINGA_INCLUDE_DIR
  
  OPTION(USE_CBLAS "Use CBlas libs" ON)
  OPTION(USE_CUDA "Use Cuda libs" ON)
--OPTION(USE_CUDNN "Use Cudnn libs" OFF)
++OPTION(USE_CUDNN "Use Cudnn libs" ON)
  OPTION(USE_OPENCV "Use opencv" OFF)
  OPTION(USE_LMDB "Use LMDB libs" OFF)
  OPTION(USE_PYTHON "Generate py wrappers" OFF)

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/4db968c2/examples/cifar10/alexnet.cc
----------------------------------------------------------------------
diff --cc examples/cifar10/alexnet.cc
index 81713f1,d6541a3..5175f49
--- a/examples/cifar10/alexnet.cc
+++ b/examples/cifar10/alexnet.cc
@@@ -84,12 -84,12 +84,10 @@@ LayerConf GenDenseConf(string name, in
    conf.set_type("Dense");
    DenseConf *dense = conf.mutable_dense_conf();
    dense->set_num_output(num_output);
--  FillerConf *bias = dense->mutable_bias_filler();
  
    ParamSpec *wspec = conf.add_param();
    wspec->set_name(name + "_weight");
    wspec->set_decay_mult(wd);
--
    auto wfill = wspec->mutable_filler();
    wfill->set_type("Gaussian");
    wfill->set_std(std);
@@@ -155,16 -155,14 +153,16 @@@ void Train(float lr, int num_epoch, str
      train_y = train.second;
      auto test = data.ReadTestData();
      nsamples = test.first.shape(0);
 -    auto maty =
 +    auto mtest =
          Reshape(test.first, Shape{nsamples, test.first.Size() / nsamples});
 -    SubRow(mean, &maty);
 -    test_x = Reshape(maty, test.first.shape());
 +    SubRow(mean, &mtest);
 +    test_x = Reshape(mtest, test.first.shape());
      test_y = test.second;
    }
 +  CHECK_EQ(train_x.shape(0), train_y.shape(0));
 +  CHECK_EQ(test_x.shape(0), test_y.shape(0));
    LOG(INFO) << "Training samples = " << train_y.shape(0)
-             << " Test samples = " << test_y.shape(0);
 -            << " Test samples =" << test_y.shape(0);
++            << ", Test samples = " << test_y.shape(0);
    auto net = CreateNet();
    SGD sgd;
    OptimizerConf opt_conf;
@@@ -177,10 -175,9 +175,10 @@@
        return 0.001;
      else if (step <= 130)
        return 0.0001;
--    else if (step <= 140)
++    else
        return 0.00001;
    });
 +
    SoftmaxCrossEntropy loss;
    Accuracy acc;
    net.Compile(true, &sgd, &loss, &acc);

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/4db968c2/examples/cifar10/cifar10.h
----------------------------------------------------------------------
diff --cc examples/cifar10/cifar10.h
index 5af54e2,7f10153..d2b9225
--- a/examples/cifar10/cifar10.h
+++ b/examples/cifar10/cifar10.h
@@@ -68,11 -70,11 +68,11 @@@ const std::pair<Tensor, Tensor> Cifar10
    char image[kImageVol];
    float float_image[kImageVol];
    int tmplabels[kBatchSize];
--  for (int itemid = 0; itemid < kBatchSize; ++itemid) {
++  for (size_t itemid = 0; itemid < kBatchSize; ++itemid) {
      // LOG(INFO) << "reading " << itemid << "-th image";
      ReadImage(&data_file, &label, image);
--    for (int i = 0; i < kImageVol; i++)
 -      float_image[i] = static_cast<float>(static_cast<int>(image[i]));
++    for (size_t i = 0; i < kImageVol; i++)
 +      float_image[i] = static_cast<float>(static_cast<uint8_t>(image[i]));
      images.CopyDataFromHostPtr(float_image, kImageVol, itemid * kImageVol);
      tmplabels[itemid] = label;
    }
@@@ -80,10 -82,10 +80,10 @@@
    return std::make_pair(images, labels);
  }
  
 -const std::pair<Tensor, Tensor> Cifar10::ReadTrainData(bool shuffle) {
 +const std::pair<Tensor, Tensor> Cifar10::ReadTrainData() {
    Tensor images(Shape{kBatchSize * kTrainFiles, 3, kImageSize, kImageSize});
    Tensor labels(Shape{kBatchSize * kTrainFiles}, kInt);
--  for (int fileid = 0; fileid < kTrainFiles; ++fileid) {
++  for (size_t fileid = 0; fileid < kTrainFiles; ++fileid) {
      string file = "data_batch_" + std::to_string(fileid + 1) + ".bin";
      const auto ret = ReadFile(file);
      CopyDataToFrom(&images, ret.first, ret.first.Size(),

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/4db968c2/examples/cifar10/make.sh
----------------------------------------------------------------------
diff --cc examples/cifar10/make.sh
index 5a41612,5a41612..0000000
deleted file mode 100755,100755
--- a/examples/cifar10/make.sh
+++ /dev/null
@@@ -1,1 -1,1 +1,0 @@@
--g++ -g --std=c++11 alexnet.cc -o alexnet -I../../include -I../../build/include -I/home/wangwei/local/cudnn5/include -I/home/wangwei/local/include -I/usr/local/cuda/include/ -I../../lib/cnmem/include -L../../build/lib/ -lsinga_core -lsinga_model  -lsinga_utils -lcudart -lcublas -lcurand -lcudnn -L/home/wangwei/local/cudnn5/lib64 -L/usr/local/cuda/lib64 ../../build/lib/libproto.a -lprotobuf

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/4db968c2/examples/cifar10/run.sh
----------------------------------------------------------------------
diff --cc examples/cifar10/run.sh
index 0000000,0000000..c01ec18
new file mode 100755
--- /dev/null
+++ b/examples/cifar10/run.sh
@@@ -1,0 -1,0 +1,2 @@@
++#!/usr/bin/env sh
++../../build/bin/alexnet -epoch 140

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/4db968c2/src/model/feed_forward_net.cc
----------------------------------------------------------------------
diff --cc src/model/feed_forward_net.cc
index 30d030a,e682918..ebbe00c
--- a/src/model/feed_forward_net.cc
+++ b/src/model/feed_forward_net.cc
@@@ -202,8 -201,8 +203,9 @@@ const std::pair<float, float> FeedForwa
  const Tensor FeedForwardNet::Forward(int flag, const Tensor& data) {
    Tensor input = data, output;
    for (auto layer : layers_) {
 +//    LOG(INFO) << layer->name() << ": " << input.L1();
      output = layer->Forward(flag, input);
+     // LOG(INFO) << layer->name() << ": " << output.L2();
      input = output;
    }
    return output;

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/4db968c2/src/model/layer/cudnn_convolution.cc
----------------------------------------------------------------------
diff --cc src/model/layer/cudnn_convolution.cc
index 33f2cf8,3dca28a..82cf4e5
--- a/src/model/layer/cudnn_convolution.cc
+++ b/src/model/layer/cudnn_convolution.cc
@@@ -72,8 -72,8 +72,8 @@@ void CudnnConvolution::InitCudnn(const 
        num_filters_, conv_height_, conv_width_));
    if (bias_term_)
      CUDNN_CHECK(cudnnSetTensor4dDescriptor(bias_desc_, CUDNN_TENSOR_NCHW,
-                                            GetCudnnDataType(dtype), 1, num_filters_, 1,
-                                            1));
 -                                           GetCudnnDataType(dtype), 1, 1, 1,
 -                                           num_filters_));
++                                           GetCudnnDataType(dtype), 1,
++                                           num_filters_, 1, 1));
    CUDNN_CHECK(cudnnSetConvolution2dDescriptor(conv_desc_, pad_h_, pad_w_,
                                                stride_h_, stride_w_, 1, 1,
                                                CUDNN_CROSS_CORRELATION));