deep-learning - Caffe 深度学习库示例

标签 deep-learning caffe

这里是一个例子 http://caffe.berkeleyvision.org/tutorial/net_layer_blob.html

我有点迷失了。我应该从这个例子中推断出什么?

// Assuming that data are on the CPU initially, and we have a blob.
const Dtype* foo;
Dtype* bar;
foo = blob.gpu_data(); // data copied cpu->gpu.
foo = blob.cpu_data(); // no data copied since both have up-to-date contents.
bar = blob.mutable_gpu_data(); // no data copied.
// ... some operations ...
bar = blob.mutable_gpu_data(); // no data copied when we are still on GPU.
foo = blob.cpu_data(); // data copied gpu->cpu, since the gpu side has modified the data
foo = blob.gpu_data(); // no data copied since both have up-to-date contents
bar = blob.mutable_cpu_data(); // still no data copied.
bar = blob.mutable_gpu_data(); // data copied cpu->gpu.
bar = blob.mutable_cpu_data(); // data copied gpu->cpu.

最佳答案

此代码片段旨在解释 Caffe 的 Blob 类的一项功能,该功能使用户免受 CPU<->GPU 内存传输的详细信息的影响。

我尝试详细说明代码中的注释:

它假设您已经声明了 Blob 对象并填充了数据。数据代表什么并不重要。此代码片段中缺少 Blob 对象的实际声明及其初始化。

// Assuming that data are on the CPU initially, and we have a blob.
const Dtype* foo;
Dtype* bar;

由于填充 blob 的数据驻留在 CPU 内存中,因此在 GPU 设备上使用它需要进行传输。

foo = blob.gpu_data(); // data copied cpu->gpu.

但是,如果您要将相同的数据复制到 CPU 内存上的其他位置,则 Blob 对象将不必执行 CPU<->GPU 传输所需的昂贵复制操作。

foo = blob.cpu_data(); // no data copied since both have up-to-date contents.

使用驻留在 GPU 内存中的数据初始化“bar”对象。它已经复制过一次了。无需重复昂贵的复制操作。

bar = blob.mutable_gpu_data(); // no data copied.
// ... some operations ...
bar = blob.mutable_gpu_data(); // no data copied when we are still on GPU.

Blob 类会跟踪 CPU 和 CPU 副本是否相同,或者是否被修改,需要更新副本才能保持它们相同。

foo = blob.cpu_data(); // data copied gpu->cpu, since the gpu side has modified the data
foo = blob.gpu_data(); // no data copied since both have up-to-date contents

现在我们只是来回查看什么会触发副本,然后会依靠数据的缓存副本。

bar = blob.mutable_cpu_data(); // still no data copied.
bar = blob.mutable_gpu_data(); // data copied cpu->gpu.
bar = blob.mutable_cpu_data(); // data copied gpu->cpu.

关于deep-learning - Caffe 深度学习库示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27972386/

相关文章:

python - 当我尝试在 Windows 10 上安装 caffe 时,脚本找不到 python 库和 numpy

python - 如何修改填充向量的 seq2seq 成本函数?

python - 将 Pandas 数据框转换为列表列表以输入到 RNN

python - 如何将模型动物园中的 VGG16 caffemodel 从旧定义 "layers"转换为 "layer"?

Tensorflow的非对称填充假设

python - 将jpeg文件直接写入lmdb

machine-learning - 全卷积网络中上采样层的 "learning multiple"应该是多少?

python - 如何检测手中的物体?从这个视频

python - Keras、TorchVision 中的预训练模型

deep-learning - 深度学习,Loss不减