machine-learning - 如何使用 HDF5 层根据迭代次数计算纪元?

标签 machine-learning neural-network deep-learning caffe

我正在使用 caffe 和 HDF5 层。它将把我的 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 轴是损失。

相关链接:Epoch vs iteration when training neural networks

最佳答案

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

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相应地 reshape Blob 。我认为您可以在此处获取一个 hdf5 文件的数据尺寸。迭代多个 hdf5 文件是在 void HDF5DataLayer<Dtype>::Next() 中完成的。函数位于 layers/hdf5_data_layer.cpp 。所以这里需要将之前收到的数据维度相加。

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

关于machine-learning - 如何使用 HDF5 层根据迭代次数计算纪元?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43268065/

相关文章:

machine-learning - 作者唯一的 "literary style"可以用来识别他/她是文本的作者吗?

keras - LSTM 时间序列产生偏移预测?

python - Keras ImageDataGenerator 用于在单独的目录中使用图像和蒙版进行分割

machine-learning - 神经网络模型不学习?

android - 错误 :tensorflow:Couldn't understand architecture name ''

python - Pytorch - 推断所有图像并逐批反向传播

r - 有没有办法在 R 中为人工神经网络使用自定义学习函数?

optimization - Tensorflow 的超参数调整

python - PyTorch 张量中的就地算术运算与普通算术运算

python - 简单的 Keras 神经网络不学习