我的C++代码有问题。我正在使用OpenNN构建神经网络,我想使用我训练好的神经网络(参见可变神经网络)来预测一组特征的输出(参见可变神经网络)。我正在尝试调用一个需要initialiser_list对象作为参数的函数。代码如下:
float featureVector[1][5] = {{1, 2, 3, 4, 5}};
Tensor<type, 2> inputs(1, featureLength);
inputs.setValues(featureVector);
neuralnetwork.calculate_outputs(inputs);我收到此错误消息: neuralnetwork.cpp:141:22:错误:对类型'const typename internal::Initializer,NumDimensions>::InitList‘(也称为'const initializer_list')的引用无法绑定到类型为'float 1’的左值TensorBase.h:861:81:注意:在此处将参数传递给参数
当我根据OpenNN中的一个示例更改代码时,它可以工作,但这不是我想要的,因为特征向量需要是一个类似上面的变量:
Tensor<type, 2> inputs(1, featureLength);
inputs.setValues({{1, 2, 3, 4, 5}});
neuralnetwork.calculate_outputs(inputs);我还尝试将featureVector更改为列表(std:: list ),但这不起作用。我知道featureVector需要是一个initialiser_list对象,但是我在网上找不到任何关于如何初始化一个initialiser_list object的答案。如果featureVector是数组或std::list就更好了,后者将被转换为initialiser_list。
编辑:
神经网络的类型:
OpenNN::NeuralNetwork neuralnetwork;函数calculate_outputs:
Tensor<type, 2> NeuralNetwork::calculate_outputs(const Tensor<type, 2>& inputs)有了评论中的解决方案,我想出了一些对我有用的东西:
auto featureVector1 = {1.f, 2.f, 3.f, 4.f, 5.f};
auto featureVector = {featureVector1};
Tensor<type, 2> inputs(1, featureLength);
inputs.setValues(featureVector);
neuralnetwork.calculate_outputs(inputs);它看起来不好,可能也不完美,但这正是我想要的。谢谢!
发布于 2021-05-18 20:09:18
如何在C++中创建initialiser_list对象
您可以使用带括号的init列表。就像你引用的例子一样。
,但这不是我想要的
那么看起来std::initialiser_list对你来说不是一个好的选择。你应该试着用其他的东西。你有没有检查过这个类有没有其他成员函数?
特征向量需要是如上所示的变量
您的示例中的特征向量不是可变的。它是一个常量数组。
发布于 2021-05-18 20:41:06
您可以在openNN源代码中查看哪些arg类型可用于setValues()函数。我找不到严格意义上的setValues(),但是here这段代码:
// Constructors
explicit Tensor(const Vector<size_t>&);
explicit Tensor(const Matrix<T>&);
///....
void set(const Vector<size_t>&);
void set(const Tensor<T>&);这意味着你可以像Vector<5> featureVector = {{1, 2, 3, 4, 5}};一样创建变量,或者如果T浮动允许Matrix<float> featureVector = {{1, 2, 3, 4, 5}};
或者,你可以创建张量对象并传入构造函数Vector或Matrix对象,而不使用set。请注意,此Vector与std::vector不同,它是openNN库数据结构中的不同部分。
https://stackoverflow.com/questions/67585636
复制相似问题