一、[libprotobuf FATAL google/protobuf/stubs/]

This program requires version 3.3.0 of the Protocol Buffer runtime library, but the installed version is 2.6.1.

应该是安装完 caffe 后又安装 tensorflow 导致 protocol 的 C++ /Python版本之间的不兼容。其实 protocol 就是完成 .prototxt 的配置与底层代码之间的映射。。


  • sudo pip2 uninstall protobuf
  • sudo pip install -Iv protobuf==3.0a3

关于 protocol 详细理解:clink


blob( blob.hpp 和 blob.cpp )是一个使用 SyncedMemory 类(独立于 CPU / GPU )来管理内存的包装器,并且有一些处理类似 Python 中的数组函数,用于数据和梯度计算(diff)的数组包含在 blob 中。

初始化 blob:

Blob(const vector<int>& shape)

blob 中的函数 :

  • shape()、 shape_string() 返回 shape, or shape(i) 获取第 i 维, or shapeEquals() 比较shape 是否相同
  • Reshape(const vector<int>& shape) or reshapeLike(const Blob& other)
  • count() 元素总数 (shape(0)*shape(1)*...)
  • offset() 获取 array 中 的 c++ 索引
  • CopyFrom() 拷贝 blob
  • data_at() and diff_at()
  • asum_data() and asum_diff()  L1 norm
  • sumsq_data() and sumsq_diff()  L1 norm
  • scale_data() and scale_diff() data 乘以一个 factor
  • Update() 根据 diff 数组更新 data array

在 CPU 模式下访问 Blob 中的 data :

const Dtype* cpu_data();
Dtype* mutable_cpu_data();
const Dtype* cpu_diff();
Dtype* mutable_cpu_diff();

GPU code :

const Dtype* gpu_data();
Dtype* mutable_gpu_data();
const Dtype* gpu_diff();
Dtype* mutable_gpu_diff();

Data transfer between GPU and CPU will be dealt automatically.

Caffe 提供一些抽象数据处理数据:

  • caffe_set() and caffe_gpu_set() to initialize the data with a value
  • caffe_add_scalar() and caffe_gpu_add_scalar() to add a scalar to data
  • caffe_axpy() and caffe_gpu_axpy() for yax+y
  • caffe_scal() and caffe_gpu_scal() for xax
  • caffe_cpu_sign() and caffe_gpu_sign() for y←sign(x)
  • caffe_cpu_axpby() and caffe_cpu_axpby for y←a×x+b×y
  • caffe_copy() to deep copy
  • caffe_cpu_gemm() and caffe_gpu_gemm() for matrix multiplication C←αA×B+βC
  • caffe_gpu_atomic_add() when you need to update a value in an atomic way (such as requests in ACID databases but for gpu threads in this case)

… and further detail.



Share this to:


邮箱地址不会被公开。 必填项已用*标注