【问题标题】:Shuffle data in LMDB file随机播放 LMDB 文件中的数据
【发布时间】:2017-03-05 05:42:08
【问题描述】:

我已经有一个为caffe 创建的现有LMDB(Symas Lightning 内存映射数据库)文件。是否有任何可能的方法来洗牌现有 LMDB 中的数据以创建一个新的 LMDB 数据洗牌。任何建议或想法都会有所帮助。

【问题讨论】:

  • 为什么要“重新洗牌”数据集?
  • 我认为改组有助于训练 caffe 网络。 LMDB是通过顺序读取数据创建的,因为LMDB中的数据是按类分组的。如果选择了一个批次,那么大部分时间批次包含相同类/组的数据。这对我训练 caffe 网络没有帮助。
  • 你能重新创建 lmdb 吗? create_imagest 有一个洗牌标志
  • 数据集通过修改版本的create_imageset转换为lmdb,用于无法实现shuffle逻辑的3D数据。
  • 那是泡菜...

标签: caffe lmdb


【解决方案1】:

LMDB按照key的词法顺序遍历数据。您可以在当前密钥前添加一个随机数,数据将相应地打乱。我还在研究一种有效的方法来在 epoch 之间随机重写密钥,因为我想在我的数据集中使用批量标准化。

【讨论】:

    【解决方案2】:

    为了补充@Manolo 给出的答案,在按照here 的建议创建 LMDB 数据集时,我将一个随机 int 连接到开头,如下所示:

    random.seed(i)
    str_id = '{:05}'.format(random.randint(1,70000))+'{:05}'.format(i)
    

    我选择了 70000,因为我的 LMDB 大约有 72000 张图像。

    【讨论】:

    • random.seed() 不提供真正的随机性。非常低效并且需要很长时间来洗牌大型数据库文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多