如何使用 HDF5 层从迭代次数计算 epoch?

Posted

技术标签:

【中文标题】如何使用 HDF5 层从迭代次数计算 epoch?【英文标题】:How to compute epoch from iteration number using HDF5 layer? 【发布时间】:2017-09-02 05:52:19 【问题描述】:

我正在使用带有 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 vs iteration when training neural networks

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

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

【讨论】:

感谢 Parag,这是一个不错的解决方案。但是,如您所见,我的 hdf5 文件存储在文本列表文件中。你认为我们可以从hdf_blobs_[0]->shape(0). 获得文件总数吗? 我就是这么说的。如果您只需要针对此问题的解决方案,那么您知道您的数据样本数量,并且您不必使用 hdf_blobs 等。有关您的问题的详细信息,请参阅我的编辑。 谢谢,我会试试的。您是否尝试过打印纪元号。我不知道为什么 caffe 没有这个选项,而其他深度学习工具有这个选项。 不,我没有尝试打印一个纪元。如果您只想为一个问题/一次执行此操作,我的建议是对样本数量进行硬编码。

以上是关于如何使用 HDF5 层从迭代次数计算 epoch?的主要内容,如果未能解决你的问题,请参考以下文章

epoch和iteration的区别

如何设置batchsize

如何将 Tensorflow 数据集 API 与训练和验证集一起使用

神经网络中的Epoch、Iteration、Batchsize

pytorch epoch, batch, iteration

机器学习中常用的变量名