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

Neural network 如何在python中获得Caffe网络的数据集大小?,neural-network,deep-learning,caffe,lmdb,pycaffe,Neural Network,Deep Learning,Caffe,Lmdb,Pycaffe,我看了一下python,发现运行整个MNIST测试数据集所需的迭代次数是硬编码的。但是,该值是否可以完全不硬编码?如何获取python中网络指向的数据集样本数?您可以使用该库直接访问lmdb import lmdb db = lmdb.open('/path/to/lmdb_folder') //Needs lmdb - method num_examples = int( db.stat()['entries'] ) 应该可以帮你解决这个问题。似乎你在一个问题中混合了迭代次数和样

我看了一下python,发现运行整个MNIST测试数据集所需的迭代次数是硬编码的。但是,该值是否可以完全不硬编码?如何获取python中网络指向的数据集样本数?

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

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

应该可以帮你解决这个问题。

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

一些更详细的解释:

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

上面提到的例子指向。我们可以看到,它需要lmdb输入,并将培训阶段和测试阶段的批大小设置为64(更多信息)。实际上,我们没有对输入数据集的大小做任何假设。e数据集中的样本数:批大小仅是处理块大小,迭代次数是caffe将需要多少批。它在到达数据库端后不会停止

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

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

您对此有一些选择:

  • 查看
    /examples/mnist/create_mnist.sh
    控制台输出-它在从初始格式转换时打印样本量(我相信您已经遵循)
  • 遵循@Shai的建议(直接阅读lmdb文件)

  • 你的输入层是什么?LMDB/levelDB/HDF5?LeNet示例默认情况下对MNIST数据库使用LMDB。那么有没有办法知道网络使用的数据集路径和格式?@user1735003尝试使用caffe proto接口解析prototxtMmh,
    caffe\u pb2
    看起来像一团乱麻。我认为您可以通过
    NetParameter.layer[0].data_param.DB.values()
    检查正在使用的数据库,前提是您知道哪一层是数据层,然后只检查LMDB或LEVELDB格式。我还没有找到测试数据库的路径,任何提示都会有帮助。“迭代量(网络训练参数)和数据集中的样本量(网络输入)之间没有任何直接关系。”好吧,
    #test#u samples=#test#u batch*#test#iter
    ,这不算关系吗?(当然,我假设有人想使用整个测试数据集进行测试)。。。我的意思是caffe对数据库大小一无所知(在我们的例子中是lmdb)。Caffe一块一块地加载数据,并不关心数据在数据库中的实际位置:当数据到达数据库的最后一条记录时,它从头开始。当然,样本数量将是批大小*迭代次数,但不会有不同的样本。即。对于caffe,我不认为有任何可能获得数据库大小。我据此编辑了我的答案。