我有以下代码:
#include<mlpack/core.hpp>#include<mlpack/methods/ann/ffn.hpp>#include<mlpack/methods/ann/layer/linear.hpp>int main(int argc, char** argv){ assert(argc==3); arma::mat data_in, data_out; mlpack::data::Load(argv[1], data_in); mlpack::data::Load(argv[2], data_out); std::cout<<"creating model"<<std::endl; mlpack::ann::FFN<> model; model.Add<mlpack::ann::Linear<>>(data_in.n_rows, 10); model.Add<mlpack::ann::SigmoidLayer<>>(); model.Add<mlpack::ann::Linear<>>(10, data_out.n_rows); model.Add<mlpack::ann::SigmoidLayer<>>(); std::cout<<"training started"<<std::endl; model.Train(data_in, data_out);
}
当我尝试运行这段代码时,总是会遇到索引越界错误:
creating modeltraining startederror: Mat::operator(): index out of boundsterminate called after throwing an instance of 'std::logic_error' what(): Mat::operator(): index out of boundsAborted (core dumped)
我也查看了mlpack关于ann::FFN<>的教程,当我尝试运行那段代码时,完全没有问题!我在这里使用的数据集有10000行和5列,在这里使用时被转换为5行和10000列,因为mlpack将一列视为一个点。数据集中每个数字都是0到1之间的随机生成的值。输入和输出数据集的维度相同。文档也没什么帮助。
回答:
确保你的训练标签范围在[1, #classes]之间。