Example #1
0
inline Dtype Layer<Dtype>::Forward(const vector<Blob<Dtype>*>& bottom,
    const vector<Blob<Dtype>*>& top) {
  Dtype loss = 0;
  Reshape(bottom, top);
  switch (Caffe::mode()) {
  case Caffe::CPU:
    Forward_cpu(bottom, top);
    for (int top_id = 0; top_id < top.size(); ++top_id) {
      if (!this->loss(top_id)) { continue; }
      const int count = top[top_id]->count();
      const Dtype* data = top[top_id]->cpu_data();
      const Dtype* loss_weights = top[top_id]->cpu_diff();
      loss += caffe_cpu_dot(count, data, loss_weights);
    }
    break;
  case Caffe::GPU:
    Forward_gpu(bottom, top);
#ifndef CPU_ONLY
    for (int top_id = 0; top_id < top.size(); ++top_id) {
      if (!this->loss(top_id)) { continue; }
      const int count = top[top_id]->count();
      const Dtype* data = top[top_id]->gpu_data();
      const Dtype* loss_weights = top[top_id]->gpu_diff();
      Dtype blob_loss = 0;
      caffe_gpu_dot(count, data, loss_weights, &blob_loss);
      loss += blob_loss;
    }
#endif
    break;
  default:
    LOG(FATAL) << "Unknown caffe mode.";
  }
  return loss;
}
Example #2
0
inline Dtype Layer<Dtype>::Forward(const vector<Blob<Dtype>*>& bottom,
                                   const vector<Blob<Dtype>*>& top) {
  // Lock during forward to ensure sequential forward
  Lock();
  Dtype loss = 0;
  Reshape(bottom, top);
  switch (Caffe::mode()) {
    case Caffe::CPU:
      Forward_cpu(bottom, top);
      for (int top_id = 0; top_id < top.size(); ++top_id) {
        if (!this->loss(top_id)) {
          continue;
        }
        const int count = top[top_id]->count();
        const Dtype* data = top[top_id]->cpu_data();
        const Dtype* loss_weights = top[top_id]->cpu_diff();
        loss += caffe_cpu_dot(count, data, loss_weights);
      }
      break;
    case Caffe::GPU:
      Forward_gpu(bottom, top);
#ifndef CPU_ONLY
      if (device_->backend() == BACKEND_CUDA) {
#ifdef USE_CUDA
        for (int top_id = 0; top_id < top.size(); ++top_id) {
          if (!this->loss(top_id)) {
            continue;
          }
          const int count = top[top_id]->count();
          const Dtype* data = top[top_id]->gpu_data();
          const Dtype* loss_weights = top[top_id]->gpu_diff();
          Dtype blob_loss = 0;
          caffe_gpu_dot(count, data, loss_weights, &blob_loss);
          loss += blob_loss;
        }
#endif  // USE_CUDA
      } else {
#ifdef USE_GREENTEA
        for (int top_id = 0; top_id < top.size(); ++top_id) {
          if (!this->loss(top_id)) {
            continue;
          }
          const int count = top[top_id]->count();
          cl_mem data = (cl_mem) (top[top_id]->gpu_data());
          cl_mem loss_weights = (cl_mem) (top[top_id]->gpu_diff());
          Dtype blob_loss = 0;
          greentea_gpu_dot(this->device_->id(), count, data, 0,
                           loss_weights, 0, &blob_loss);
          loss += blob_loss;
        }
#endif  // USE_GREENTEA
      }
#endif
      break;
    default:
      LOG(FATAL)<< "Unknown caffe mode.";
    }
  Unlock();
  return loss;
}
Example #3
0
File: layer.hpp Project: B501/caffe
inline Dtype Layer<Dtype>::Forward(const vector<Blob<Dtype>*>& bottom,
    const vector<Blob<Dtype>*>& top) {
  // Lock during forward to ensure sequential forward
  Lock();
  Dtype loss = 0;
  double tempdouble = 0;
  int tempint = 0;
  //if (bottom.size() != 0)
	 // tempint = bottom[0]->count();

  Reshape(bottom, top);
  switch (Caffe::mode()) {
  case Caffe::CPU:
    Forward_cpu(bottom, top);
	
    for (int top_id = 0; top_id < top.size(); ++top_id) {
      if (!this->loss(top_id)) { continue; }
      const int count = top[top_id]->count();
      const Dtype* data = top[top_id]->cpu_data();
	  //const Dtype* label = bottom[0]->cpu_data();
	  //for (int i = 0; i < 10; i++)
	  //{
		 //
		 // printf("%lf\t", data[i]);
		 // /*if ((i + 1) % 10 == 0)
		 // {
			//  printf("\n");
		 // }*/
			// 
	  //}
	  //for (int i = 0; i < 10; i++)
		 // printf("%lf\t", label[i]);
      const Dtype* loss_weights = top[top_id]->cpu_diff();
      loss += caffe_cpu_dot(count, data, loss_weights);
    }
    break;
  case Caffe::GPU:
    Forward_gpu(bottom, top);
#ifndef CPU_ONLY
    for (int top_id = 0; top_id < top.size(); ++top_id) {
      if (!this->loss(top_id)) { continue; }
      const int count = top[top_id]->count();
      const Dtype* data = top[top_id]->gpu_data();
      const Dtype* loss_weights = top[top_id]->gpu_diff();
      Dtype blob_loss = 0;
      caffe_gpu_dot(count, data, loss_weights, &blob_loss);
      loss += blob_loss;
    }
#endif
    break;
  default:
    LOG(FATAL) << "Unknown caffe mode.";
  }
  Unlock();
  return loss;
}
inline void Layer<Dtype>::Forward(const vector<Blob<Dtype>*>& bottom,
		vector<Blob<Dtype>*>* top) {
	switch (Caffe::mode()) {
	case Caffe::CPU:
		Forward_cpu(bottom, top);
		break;
	case Caffe::GPU:
		Forward_gpu(bottom, top);
		break;
	default:
		LOG(FATAL)<< "Unknown caffe mode.";
	}
};
Example #5
0
inline Dtype Layer<Dtype>::Forward(const vector<Blob<Dtype>*>& bottom,
    const vector<Blob<Dtype>*>& top) {
  // Lock during forward to ensure sequential forward
  
  for(int i=0; i<bottom.size(); i++)
  {
   LOG(INFO) << bottom[i]->shape_string();
	}
  
  Lock();
  Dtype loss = 0;
  Reshape(bottom, top);
  switch (Caffe::mode()) {
/*   case Caffe::CPU:
    Forward_cpu(bottom, top);
    for (int top_id = 0; top_id < top.size(); ++top_id) {
      if (!this->loss(top_id)) { continue; }
      const int count = top[top_id]->count();
      const Dtype* data = top[top_id]->cpu_data();
      const Dtype* loss_weights = top[top_id]->cpu_diff();
      loss += caffe_cpu_dot(count, data, loss_weights);
    }
    break;*/
  case Caffe::GPU:
    Forward_gpu(bottom, top);
#ifndef CPU_ONLY
    for (int top_id = 0; top_id < top.size(); ++top_id) {
      if (!this->loss(top_id)) { continue; }
      const int count = top[top_id]->count();
      const Dtype* data = top[top_id]->gpu_data();
      const Dtype* loss_weights = top[top_id]->gpu_diff();
      Dtype blob_loss = 0;
      caffe_gpu_dot(count, data, loss_weights, &blob_loss);
      loss += blob_loss;
    }
#endif
    break;
  default:
    LOG(FATAL) << "Unknown caffe mode.";
  }
  Unlock();
  return loss;
}
Example #6
0
    void MaximumCaffe<T>::Forward(const std::vector<caffe::Blob<T>*>& bottom,
                                  const std::vector<caffe::Blob<T>*>& top)
    {
        try
        {
            // CUDA
            #ifdef USE_CUDA
                Forward_gpu(bottom, top);
            // OpenCL or CPU
            #else
                // CPU Version is already very fast (4ms)
                Forward_cpu(bottom, top);
            #endif

        }
        catch (const std::exception& e)
        {
            error(e.what(), __LINE__, __FUNCTION__, __FILE__);
        }
    }