如何使用 HDF5 层从迭代数计算纪元?

约翰

我正在使用带有 HDF5 层的 caffe。它会将我的 hdf5list.txt 读作

/home/data/file1.h5
/home/data/file2.h5
/home/data/file3.h5

在每个文件*.h5 中,我有 10.000 张图像。所以,我总共有大约 30.000 张图像。在每次迭代中,我将使用批量大小为 10 作为设置

layer {
  name: "data"
  type: "HDF5Data"
  top: "data"
  top: "label"
  hdf5_data_param {
    source: "./hdf5list.txt"
    batch_size: 10
    shuffle: true
  }
  include {
    phase: TRAIN
  }
}

使用caffe,它的输出喜欢

Iterations 10, loss=100
Iterations 20, loss=90
...

我的问题是如何计算时代的数量,关于损失?这意味着我想绘制一个图形,x 轴是纪元数,y-asix 是损失。

相关链接:训练神经网络时的 Epoch 与迭代

自主性

如果您只想针对当前问题执行此操作,则非常容易。注意

Epoch_index = floor((iteration_index * batch_size) / (# data_samples))

现在,在 中solver.cpp,找到 Caffe 打印 的行Iterations ..., loss = ...只需使用上述公式计算纪元索引并打印出来。你完成了。不要忘记重新编译Caffe。

如果您想修改 Caffe 以使其始终显示纪元索引,那么您首先需要计算所有 HDF5 文件的数据大小。通过浏览Caffe HDF5层代码,我想你可以通过hdf_blobs_[0]->shape(0). 您应该将其添加到所有 HDF5 文件中,并在solver.cpp.

变量hdf_blobs_定义在layers/hdf5_data_layer.cpp. 我相信它填充在函数中util/hdf5.cpp我认为流程是这样的:

  1. 在 中layers/hdf5_data_layer.cpp,从文本文件中读取 hdf5 文件名。
  2. 然后一个函数LoadHDF5FileData尝试将 hdf5 数据加载到 blob 中。
  3. 在内部LoadHDF5FileData,blob 变量hdf_blobs_被声明并填充到函数中util/hdf5.cpp
  4. 在内部util/hdf5.cpp,该函数hdf5_load_nd_dataset首先调用相应hdf5_load_nd_dataset_helper地重塑 blob。我认为这是您将获得一个 hdf5 文件的数据尺寸的地方迭代多个 hdf5 文件是void HDF5DataLayer<Dtype>::Next()layers/hdf5_data_layer.cpp. 所以这里需要把之前收到的数据维度加起来。

最后,您需要弄清楚如何将它们传递回直到solver.cpp.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章