我看一下python example for Lenet,看看在整个MNIST测试数据集上运行所需的迭代次数是硬编码的。但是,这个值根本不是硬编码的吗?如何在python中获取网络指向的数据集的样本数?
答案 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 中手动确定样本数量 ,然后为批量大小和迭代指定相应的值。
你有一些选择:
./examples/mnist/create_mnist.sh
控制台输出 - 它从初始格式转换时打印样本数量(我相信您遵循this tutorial);