Я обучил простую нейронную сеть, которая просто умножает 4 числа и дает 1 число в качестве вывода.
( output(x0) = in1(x0)*in2(x0)*in3(x0) *in4(x0)).
или описание:
![description](https://i.stack.imgur.com/l0U4b.jpg)
Моя нейронная сеть имеет 4 входа и 1 выход, [10 10] - скрытый слой.Я использовал genFunction для генерации файла .m из сети. Затем я использовал кодер MATLAB для генерации функции C ++.Я генерирую код со следующими типами ввода: типы ввода:
![input types](https://i.stack.imgur.com/gu9Hj.jpg)
Моя проблема в том, что когда я тестирую код C ++, он дает только 2 первых выборки для вывода.
Я храню свои записи в std :: vector, размер которого равен 400 (каждый входной размер равен 100)
До сих пор я сделал следующее (хотя желаемого вывода нет):
std::vector<double> Multiplier(std::vector<double>& input)
{
double* X_data = new double[input.size()];
X_data = vec2ar(input);
int X_size[2];
X_size[0] = 4;
X_size[1] = 100;
double* Y_data = new double[input.size()];
int Y_size[100];
В то время как оригинал был:
void multiplier(const double X_data[], const int X_size[2], double Y_data[], int
Y_size[2])
{
double Xp1_data[800];
int Xp1_size[2];
int j;
double a1_data[2000];
int coffset;
int a1_size[2];
int boffset;
double tmp_data[2000];
int k;
double b_a1_data[2000];
И для получения результата:
std::vector<double> output;
output = ar2vec(Y_data);
return output;
Все, что я хочу, это то, что у нас есть 4 вектора, и дайте им этоФункция просто умножает соответствующие выборки, как показано в «описании» (в моем случае у нас есть 4 вектора размером 100, и мы ожидаем выход с размером 100).
И для функций ar2vec и vec2ar:
std::vector<double> ar2vec(double arr[])
{
std::vector<double> vec;
copy(&arr[0], &arr[100], std::back_inserter(vec));
return vec;
}
double* vec2ar(std::vector<double> vec)
{
double * arr = new double[vec.size()];
copy(vec.begin(), vec.end(), arr);
return arr;
}
Как исправить мою проблему?