【问题标题】:How to get the dataset size of a Caffe net in python?如何在 python 中获取 Caffe 网络的数据集大小?
【发布时间】:2016-03-09 15:18:18
【问题描述】:

我查看了 python example for Lenet,发现运行整个 MNIST 测试数据集所需的迭代次数是硬编码的。但是,这个值可以不被硬编码吗? python中如何获取网络指向的数据集的样本数?

【问题讨论】:

  • 你的输入层是什么? LMDB/levelDB/HDF5?
  • LeNet 示例默认使用 LMDB 用于 MNIST 数据库。

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


【解决方案1】:

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

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

应该为您解决问题。

【讨论】:

  • 那有没有办法知道网络使用的数据集路径和格式?
  • @user1735003 尝试使用caffe proto接口解析prototxt
  • 嗯,caffe_pb2 似乎是一团糟。我认为您可以通过NetParameter.layer[0].data_param.DB.values() 检查您正在使用的数据库,假设您知道哪一层是数据层,然后这只检查 LMDB 或 LEVELDB 格式。我还没有找到测试数据库的路径,任何提示都会有所帮助。
【解决方案2】:

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

一些更详细的解释:

EDITCaffe 将完全加载(batch size x iterations)样本用于训练或测试,但加载样本的数量实际数据库大小没有关系:它会在到达数据库最后一条记录后从头开始读取 - 换句话说,数据库在 caffe 就像circular buffer

提到的例子指向this configuration。我们可以看到它需要 lmdb 输入,并将 batch size 设置为 64(有关 batches and BLOBs 的更多信息)以进行 训练 阶段和 100 用于 测试 阶段。实际上,我们不对输入数据集大小做任何假设,即。 e. 数据集中的样本数batch size 只处理块大小,iterationscaffe 需要多少个批次.到达数据库结束后不会停止。

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

因此,如果您想加载整个数据集进行测试,您只能选择首先手动确定 mnist_test_lmdbmnist_train_lmdb 中的样本数量 ,然后为 batch sizeiterations 指定相应的值。

你有一些选择:

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

【讨论】:

  • “迭代次数(网络训练参数)和数据集中样本数量(网络输入)之间没有任何直接关系。”好吧,#test_samples = #test_batch * #test_iter,这不算关系吗? (当然,我假设想使用整个测试数据集进行测试)。
  • 好吧,我可能有点不清楚......我的意思是 caffe数据库大小(在我们的例子中是 lmdb)一无所知。 Caffe 逐块加载数据,不关心数据库中的实际位置:当它到达数据库最后一条记录时,它从头开始。当然样本数量将是batch_size * iterations_num,但不会有不同样本。 IE。使用 caffe,我看不到任何获得数据库大小的可能性。我相应地编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 2021-11-02
  • 2016-09-28
  • 2016-10-26
  • 2012-11-01
  • 2011-09-02
  • 2019-06-02
  • 2018-02-19
  • 1970-01-01
相关资源
最近更新 更多