如何在python中获取Caffe网络的数据集大小?

时间:2015-12-04 16:12:18

标签: neural-network deep-learning caffe lmdb pycaffe

我看一下python example for Lenet,看看在整个MNIST测试数据集上运行所需的迭代次数是硬编码的。但是,这个值根本不是硬编码的吗?如何在python中获取网络指向的数据集的样本数?

2 个答案:

答案 0 :(得分:3)

您可以使用lmdb库直接访问lmdb

import lmdb
db = lmdb.open('/path/to/lmdb_folder')       //Needs lmdb - method
num_examples = int( db.stat()['entries'] )

应该为你做的伎俩。

答案 1 :(得分:1)

似乎您在一个问题中混合了迭代样本量。在提供的example中,我们只能看到迭代次数,i。即训练阶段将重复多少次。数据集(网络输入)中迭代(网络训练参数)的数量与样本的数量之间没有任何直接关系。

更详细的解释:

编辑 Caffe 将完全加载(批量大小 x 迭代)样本进行培训或测试,但与加载样本量实际数据库大小无关:它将在到达数据库最后一条记录后从头开始读取 - 换句话说,数据库在中caffe 就像一个circular buffer

提到的示例指向this configuration。我们可以看到 lmdb 输入,并将批量大小设置为 64 (有关batches and BLOBs的更多信息)培训阶段和 100 用于测试阶段。我们真的不对输入数据集大小做出任何假设,即。即数据集中的样本数量批量大小仅处理块大小,迭代 caffe 需要多少批次。到达数据库结束后它不会停止。

换句话说,网络本身(即 protobuf 配置文件)并未指向数据库中的任何数量的样本 - 仅指向数据集名称和格式以及期望的样品量。据我所知,目前无法用 caffe 确定数据库大小

因此,如果您要加载整个数据集进行测试,您只能选择首先在 mnist_test_lmdb mnist_train_lmdb 中手动确定样本数量 ,然后为批量大小迭代指定相应的值。

你有一些选择:

  1. 查看./examples/mnist/create_mnist.sh控制台输出 - 它从初始格式转换时打印样本数量(我相信您遵循this tutorial);
  2. 关注@ Shai的建议(直接阅读lmdb文件)。