问题标签 [pycaffe]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3858 浏览

neural-network - 如何在 caffe 或现有示例上将图像数据提供给 HDF5?

在图像分类和回归任务上,我很难使用 HDF5 使用 caffe,由于某种原因,在 HDF5 上的训练总是会在一开始就失败,测试和训练损失可能很快就会下降到接近于零。在尝试了降低学习率、添加 RELU、dropout 等所有技巧之后,什么都没有开始工作,所以我开始怀疑我提供给 caffe 的 HDF5 数据是错误的。

所以目前我正在研究通用数据集(牛津 102 类别花卉数据集,它也有公共代码),首先我尝试 ImageData 和 LMDB 层进行分类,它们都运行得很好。最后我使用 HDF5 数据层进行微调,training_prototxt 不会改变,除非在使用 HDF5 的数据层上。再一次,在学习开始时,在第 60 次迭代时,损失从 5 下降到 0.14,在第 100 次迭代时下降到 0.00146,这似乎证明了 HDF5 数据不正确。

我在github上有两个 HDF5 片段的图像和标签,它们似乎都生成了 HD​​F5 数据集,但由于某种原因,这些数据集似乎不适用于 caffe

我想知道这些数据有什么问题,或者让这个示例在 HDF5 中运行的任何问题,或者您是否有一些用于分类或回归的 HDF5 示例,这对我很有帮助。

一个片段显示为

0 投票
1 回答
1491 浏览

deep-learning - 使用 Caffe 进行多标签分类

我想微调 GoogLeNet 以使用 Caffe 进行多标签分类。我已经将它微调为单标签分类,但我还不能过渡到多标签。

我正在做的主要步骤是不同的:

为数据和基本事实创建 LMDB

我在这里这里修改代码以创建一个带有数据的 LMDB 和另一个带有基本事实的 LMDB。

用 SigmoidCrossEntropyLoss 替换 SoftmaxWithLoss

更新 train_val.prototxt,我将 SoftmaxWithLoss 层替换为 SigmoidCrossEntropyLoss,并设置数据层以便加载两个 DB。我像处理单标签分类问题一样设置学习率参数。

这个步骤似乎奏效了。数据流,可以执行solver.step(1)。为了验证数据和标签是否正确加载,我使用公式明确计算了损失,并得到了与 Caffe 相同的结果。

问题

网络不收敛。运行它数百次迭代,每个不同的类平均围绕类人口。也就是说,如果 a 类在总体中有 0.35 个 1 和 0.65 个 0,那么无论真实标签如何,网络对于每个观察值都会收敛到 ~0.35 的分类概率。

可能的错误 1

我怀疑问题是因为我未能以 GoogLeNet 预训练模型可以从中学习的方式将图像正确加载到 caffe 中。到目前为止,我以前的经验是 convert_imageset,它工作得很好。现在我正在使用 shelhamer 代码将图像保存到 LMDB 中:

加载图像时,我将数据层中的平均值标准化。这看起来对吗?还有另一种方法吗?

可能的错误 2

也可能是 train_val.prototxt 定义错误。除了切换 SoftmaxWithLoss -> SigmoidCrossEntropyLoss,还有什么需要做的吗?

任何帮助将不胜感激!谢谢!

0 投票
1 回答
625 浏览

python - Cannot import caffe - iPython doesn't find environment variables that 'ordinary' python finds

I'm using Anaconda python on a Mac running OS X 10.11 El Capitan.

I'm trying to use pycaffe in iPython, but importing it (import caffe) fails with the error

While iPython can't import caffe, doing so in 'ordinary' python works.

I should also mention that I'm using CUDA 7.5, and although I can't see which version of caffe I have (downloaded zip) it was done from the master branch on September 17 2015.

The actions I took for 'ordinary' python to be able to import caffe was to add the following to ~/.bash_profile

iPython is reading the PYTHONPATH set in .bash_profile since it will give ImportError: No module named caffe if the export PYTHONPATH=... line is commented out. But for some reason it doesn't find the DYLD_FALLBACK_LIBRARY_PATH, which 'ordinary' python does.

Any ideas on what might be wrong?

0 投票
1 回答
758 浏览

caffe - 在 Caffe 中计算 ROC 和 AUC?

我在 Caffe 中训练了 imagenet。现在我正在尝试为我的模型和 caffe 提供的训练模型计算 ROC/AUC。我有两个问题:

1) ROC/AUC 主要用于二元类,但我也发现在某些情况下人们将它用于多类。1000个班可以吗?它的影响是什么?正如评论中的那样,人们在多类问题中没有对 ROC/AUC 给出好的答案。

2)如果可能的话,比较两个基于 ROC/AUC 的模型将是一个好主意,有人能告诉如何在 Caffe 中为这 1000 个类做这件事吗?我是否必须从头开始重新训练模型,还是只能使用最终训练的模型进行计算?

问候

0 投票
1 回答
3461 浏览

python - PYCHARM 导入 caffe 错误

我尝试了几个想法来让 caffe 在 pycharm 上工作。

我还添加了 pycharm 的路径。 在此处输入图像描述

在此处输入图像描述

import caffe 在 pycharm 中不起作用,但在终端中起作用。

caffe 文件夹也在我的 pythonpath 中。

在此处输入图像描述

0 投票
1 回答
1513 浏览

machine-learning - Caffe 中的“标签”是什么?

在 Caffe 中,当您在 protobuf 文件中为 NN 定义输入时,您可以输入“数据”和“标签”。我猜标签包含训练数据的预期输出(它通常被认为是y机器学习文献中的值)。

我的问题是在 caffe.proto 文件中,标签被定义为标量(int 或 long)。至少对于数据,我可以将它设置为一个 numpy 数组,因为它需要 String 值。如果我正在训练多个预测输出,我如何将它作为数组传递?

还是我弄错了?是什么label?它是干什么用的?以及如何将y值传递给 caffe?

0 投票
1 回答
830 浏览

python - Caffe HDF5 不学习

我正在使用 Caffe 将 GoogleNet 网络微调到我自己的数据集。如果我使用 IMAGE_DATA 层作为输入学习发生。但是,我需要切换到 HDF5 层以进行所需的进一步扩展。当我使用 HDF5 层时,不会发生学习。

我使用完全相同的输入图像,并且标签也匹配。我还检查以确保 .h5 文件中的数据可以正确加载。确实如此,而且 Caffe 还能够找到我提供给它的示例数量以及正确的类数量 (2)。

这让我认为问题在于我手动执行的转换(因为 HDF5 层不执行任何内置转换)。这些代码如下。我执行以下操作:

  • 将图像从 RGB 转换为 BGR
  • 将其大小调整为 256x256,以便我可以从 ImageNet 中减去平均文件(包含在 Caffe 库中
  • 由于原始的 GoogleNet prototxt 没有除以 255,我也没有(见这里
  • 我将图像大小调整为 224x224,这是 GoogleNet 所需的裁剪大小
  • 根据 Caffe 的要求,我根据需要转置图像以满足 CxHxW
  • 目前我没有执行数据增强,如果我让 oversample=True 可以打开它。

有人能看出这种方法有什么问题吗?数据增强是否如此重要以至于没有它就无法进行学习?

HDF5转换代码

IMAGE_DATA 和 HDF5 prototxt 文件的相关区别

更新

当我说没有学习发生时,我的意思是与 IMG_Data 相比,使用 HDF5 数据时我的训练损失并没有持续下降。在下图中,第一个图是 IMG_DATA 网络的训练损失变化,另一个是 HDF5 数据网络。

我正在考虑的一种可能性是网络过度拟合了我提供给它的每个 .h5。目前我正在使用数据增强,但所有增强的示例都与其他示例一起存储到一个 .h5 文件中。但是,由于单个输入图像的所有增强版本都包含在同一个 .h5 文件中,我认为这可能会导致网络过度适应该特定的 .h5 文件。但是,我不确定这是否是第二个情节所暗示的。

使用 IMG_DATA 输入的训练损失 HDF5 输入的训练损失

0 投票
1 回答
643 浏览

neural-network - Caffe 准确率大于 100%

我正在构建一个,但是,当我使用lenet 示例中提供的自定义训练函数且批量大于 110 时,我的准确度大于 1(100%)。

如果我使用批量大小 32,我将获得 30% 的准确率。批量大小等于 64 我的净精度为 64。批量大小等于 128,精度为 1.2。

我的图像是 32x32。训练数据集:56 张中性人脸图像。60 张惊喜面孔的图像。测试数据集:15 张中性人脸图像。15 张惊喜面孔的图像。

这是我的代码:

那么,我的代码有什么问题?

0 投票
2 回答
5194 浏览

python - Caffe,如何从预训练网络进行预测

我正在使用此代码加载我的网络:

我对三行有疑问。

1-mean=np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy').mean(1).mean(1)

什么意思?我应该使用这个平均值还是另一个?如果是,我在哪里可以获得自定义平均值?我正在使用自定义数据集。

2-channel_swap=(2,1,0)

channel_swap 是什么意思?再说一次,我应该使用这个值还是自定义值?

最后一个

3-raw_scale=255

什么是 raw_scale?我应该使用什么值?

我正在使用Cohn Kanade数据集。所有图像均为 64x64 且为灰度。

0 投票
2 回答
9496 浏览

python - 在 python 中构建自定义 Caffe 层

在解析了许多关于在 Python 中构建 Caffe 层的链接之后,我仍然难以理解一些概念。可以请人澄清一下吗?

我仍然缺少的是:

  1. setup()方法:我应该在这里做什么?为什么在示例中我应该将“底部”参数的长度与“2”进行比较?为什么应该是2?它似乎不是批量大小,因为它是任意的?我理解的底部是blob,然后第一个维度是批量大小?
  2. reshape()方法:据我所知,'bottom'输入参数是下层的blob,'top'参数是上层的blob,我需要根据前向计算的输出形状重塑顶层。但是,如果这些形状在每次传球之间没有变化,只有权重发生变化,为什么我需要在每次向前传球时都这样做?
  3. reshapeforward方法使用 'top' 输入参数的索引为 0。为什么我需要使用top[0].data=...ortop[0].input=...而不是top.data=...and top.input=...?这个指数是关于什么的?如果我们不使用这个顶级列表的其他部分,为什么它会以这种方式暴露出来?我可以怀疑它或 C++ 主干的巧合,但最好确切地知道。
  4. reshape()方法,符合:

    我在这里做什么?为什么它的维度又是2?我在这里算什么?为什么 blob 的两个部分(0 和 1)在某些成员的数量上应该相等(count)?

  5. forward()方法,我通过这一行定义:

    如果我定义它,什么时候在正向路径之后使用它?我们可以使用

    而是在此方法的后面计算损失,而不分配给self,还是出于某种目的而完成?

  6. backward()方法:这是关于什么的:for i in range(2):?为什么范围又是2?

  7. backward()方法、propagate_down参数:为什么要定义?我的意思是,如果它的 True, 梯度应该分配给我所看到的,但是如果它什么都不做并且仍然在里面循环bottom[X].diff,为什么有人会调用什么都不做的方法呢?propagate_down = False

很抱歉,如果这些问题太明显了,我只是无法找到一个很好的指南来理解它们并在这里寻求帮助。