Example #1
0
void Net::ReadData(const mxArray *mx_data) {
  LayerInput *firstlayer = static_cast<LayerInput*>(layers_[0]);
  std::vector<size_t> data_dim = mexGetDimensions(mx_data);
  size_t mapsize1, mapsize2;
  if (kMapsOrder == kMatlabOrder) {
    mapsize1 = data_dim[0];
    mapsize2 = data_dim[1];
  } else {
    mapsize1 = data_dim[1];
    mapsize2 = data_dim[0];
  }  
  mexAssert(mapsize1 == firstlayer->mapsize_[0] && 
            mapsize2 == firstlayer->mapsize_[1],
    "Data and the first layer must have equal sizes");  
  size_t outputmaps = 1;
  if (data_dim.size() > 2) {
    outputmaps = data_dim[2];
  }
  mexAssert(outputmaps == firstlayer->outputmaps_,
    "Data's 3rd dimension must be equal to the outputmaps on the input layer");
  size_t samples_num = 1;  
  if (data_dim.size() > 3) {
    samples_num = data_dim[3];
  }  
  ftype *data_ptr = mexGetPointer(mx_data);  
  // transposed array
  data_.attach(data_ptr, samples_num, mapsize1 * mapsize2 * outputmaps, 1, true);  
  if (firstlayer->norm_ > 0) {    
    MatCPU norm_data(data_.size1(), data_.size2());
    norm_data.reorder(true, false);
    norm_data = data_;
    norm_data.Normalize(firstlayer->norm_);        
    Swap(data_, norm_data);
  }
}
Example #2
0
void Net::InitWeights(const mxArray *mx_weights_in) { // testing
  size_t num_weights = NumWeights();
  mexAssert(num_weights == mexGetNumel(mx_weights_in), 
    "In InitWeights the vector of weights has the wrong length!");
  weights_.Init(mexGetPointer(mx_weights_in), num_weights);
  size_t offset = 0;
  for (size_t i = 0; i < layers_.size(); ++i) {
    layers_[i]->InitWeights(weights_, offset, false);
  }
}
Example #3
0
void Net::ReadData(const mxArray *mx_data) {
  std::vector<size_t> data_dim = mexGetDimensions(mx_data);
  mexAssert(data_dim.size() == 4, "The data array must have 4 dimensions");  
  mexAssert(data_dim[0] == layers_[0]->mapsize_[0] && 
            data_dim[1] == layers_[0]->mapsize_[1],
    "Data and the first layer must have equal sizes");  
  mexAssert(data_dim[2] == layers_[0]->outputmaps_,
    "Data's 3rd dimension must be equal to the outputmaps on the input layer");
  mexAssert(data_dim[3] > 0, "Input data array is empty");
  ftype *data = mexGetPointer(mx_data);
  data_.attach(data, data_dim[3], data_dim[0] * data_dim[1] * data_dim[2]);  
}
Example #4
0
void Net::InitWeights(const mxArray *mx_weights_in, mxArray *&mx_weights) {
  size_t num_weights = NumWeights();
  bool isgen = false;
  if (mx_weights_in != NULL) { // training
    mexAssert(num_weights == mexGetNumel(mx_weights_in), 
      "In InitWeights the vector of weights has the wrong length!");
    mx_weights = mexDuplicateArray(mx_weights_in);    
  } else { // genweights
    mx_weights = mexNewMatrix(1, num_weights);    
    isgen = true;
  }
  weights_.Init(mexGetPointer(mx_weights), num_weights);
  size_t offset = 0;
  for (size_t i = 0; i < layers_.size(); ++i) {
    layers_[i]->InitWeights(weights_, offset, isgen);
  }  
}
Example #5
0
void Net::GetWeights(mxArray *&mx_weights) const {  
  size_t num_weights = NumWeights();  
  mx_weights = mexNewMatrix(num_weights, 1);    
  Mat weights_cpu;
  weights_cpu.attach(mexGetPointer(mx_weights), num_weights, 1);
  Mat weights_mat(num_weights, 1);
  #if COMP_REGIME != 2 // CPU
    weights_mat.attach(weights_cpu);
  #endif
  size_t offset = 0;
  for (size_t i = 0; i < layers_.size(); ++i) {
    layers_[i]->GetWeights(weights_mat, offset);
  }  
  #if COMP_REGIME == 2 // GPU
    DeviceToHost(weights_mat, weights_cpu);    
  #endif    
}