gpt4 book ai didi

machine-learning - caffe hdf5 H5LTfind_dataset(file_id, dataset_name_) 找不到HDF5数据集

转载 作者:行者123 更新时间:2023-11-30 09:53:30 26 4
gpt4 key购买 nike

我使用 HDF5 作为 caffe 的输入之一,hdf5 文件仅包含一些要放入 sigmoidcrossentropyloss 层的权重信息,因此它不包含任何标签。发生此错误:

    I1015 07:08:54.605777 17909 net.cpp:100] Creating Layer weight28
I1015 07:08:54.605797 17909 net.cpp:408] weight28 -> weight28
I1015 07:08:54.605834 17909 hdf5_data_layer.cpp:79] Loading list of HDF5 filenames from: /home/zhangyu/codes/unsupervised/data/weight28.txt
I1015 07:08:54.605926 17909 hdf5_data_layer.cpp:93] Number of HDF5 files: 1
F1015 07:08:54.608682 17909 hdf5.cpp:14] Check failed: H5LTfind_dataset(file_id, dataset_name_) Failed to find HDF5 dataset weight28
*** Check failure stack trace: ***
@ 0x7f17077ec9fd google::LogMessage::Fail()
@ 0x7f17077ee89d google::LogMessage::SendToLog()
@ 0x7f17077ec5ec google::LogMessage::Flush()
@ 0x7f17077ef1be google::LogMessageFatal::~LogMessageFatal()
@ 0x7f1707e4d774 caffe::hdf5_load_nd_dataset_helper<>()
@ 0x7f1707e4bcf0 caffe::hdf5_load_nd_dataset<>()
@ 0x7f1707e8fd78 caffe::HDF5DataLayer<>::LoadHDF5FileData()
@ 0x7f1707e8ebf8 caffe::HDF5DataLayer<>::LayerSetUp()
@ 0x7f1707e283b2 caffe::Net<>::Init()
@ 0x7f1707e2ad85 caffe::Net<>::Net()
@ 0x7f1707e6da5f caffe::Solver<>::InitTrainNet()
@ 0x7f1707e6df7b caffe::Solver<>::Init()
@ 0x7f1707e6e3e8 caffe::Solver<>::Solver()
@ 0x7f1707e865a3 caffe::Creator_SGDSolver<>()
@ 0x4116b1 caffe::SolverRegistry<>::CreateSolver()
@ 0x40ac56 train()
@ 0x406e32 main
@ 0x7f17066adf45 (unknown)
@ 0x4074b6 (unknown)

searched对于这个问题,我的 hdf5 文件似乎需要一个数据集标签,但事实是我不需要它。我只需要 91250x28x28 的数据集。并将其作为权重输入到损失层。这是我的 h5 文件:

HDF5 weight28.h5 
Group '/'
Dataset 'data'
Size: 2555000x28
MaxSize: Infx28
Datatype: H5T_IEEE_F64LE (double)
ChunkSize: 28x28
Filters: none
FillValue: 0.000000

我修改了 sigmiodcrossentropy 层,将其添加为第三个底层:

// modified here
const Dtype* pixelweights = bottom[2]->cpu->data();

Dtype loss = 0;
for (int i = 0; i < count; ++i) {
loss -= pixelweights(i)*(input_data[i] * (target[i] - (input_data[i] >= 0)) -
log(1 + exp(input_data[i] - 2 * input_data[i] * (input_data[i] >= 0))));
}
top[0]->mutable_cpu_data()[0] = loss / num;
}

原型(prototype)文件:

layer {
name: "loss_G"
type: "SigmoidCrossEntropyLoss"
bottom: "global_smR"
bottom: "mask28"
bottom: "weight28" //Added it here
top: "loss_G"
}

我预计 h5 文件中的一批数据将以 bottom[2](大小batchsize*28*28)的形式读取到网络。这是问题所在。

  • 我能从上面的代码中得到我所期望的结果吗?
  • 我是否必须在 h5 文件中添加标签集才能解决该错误?
  • 如果我将其添加到h5文件中,损失层中多余的标签数据应该如何处理?

任何建议都会被采纳,谢谢!

最佳答案

您的“HDF5Data”具有名为“weight28”top,但您的h5文件仅包含数据集“数据”“HDF5Data”层的“top”必须h5文件中存储的数据集名称相同。如果同一文件中存储了多个数据集,则可以在 h5 文件中拥有多个带有数据集名称的 top

关于machine-learning - caffe hdf5 H5LTfind_dataset(file_id, dataset_name_) 找不到HDF5数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40059060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com