Многое перепробовал, но объект так и не хранит массивы, после их заполнения
Решил создать нейронную сеть с нуля...
Или тут:
#include <iostream>
#include <vector>
#include <cmath>
typedef unsigned int uint;
class Neuron {
public:
int countInput = 0;
std::vector<std::vector<double>> input;
std::vector<std::vector<double>> weight;
double output = 0;
Neuron() {}
Neuron(std::vector<std::vector<double>>&);
double result();
};
Neuron::Neuron(std::vector<std::vector<double>>& inp) {
srand(time(0));
this->countInput = (int)inp[0].size();
for (uint i = 0; i < countInput; i++) {
input.push_back(std::vector<double>());
weight.push_back(std::vector<double>());
for (uint j = 0; j < countInput; j++) {
input[i].push_back(inp[i][j]);
weight[i].push_back(0.5);
}
}
}
double Neuron::result() {
output = 0;
std::cout << this->input.size();
for (uint i = 0; i < countInput; i++) {
for (uint j = 0; j < countInput; i++) {
output += input[i][j] * weight[i][j];
}
}
return output;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Что значит "не хранит"? Как вы проверяете/убеждаетесь?
Но в любом случае - зачем вообще все эти сложности? Почему бы не написать просто
Neuron::Neuron(std::vector<std::vector<double>>& inp)
:input(inp), weight(inp.size(),vector<double>(inp[0].size(),0.5)){}
Еще у вас есть ошибка и непонятка...
Ошибка - в цикле
for (uint j = 0; j < countInput; i++)
проверяете j, а увеличиваете i и пытаетесь потом работать с несуществующим вектором... Видимо, происходящий при этом этот слет программы вы и называете "не хранит массивы"?
Непонятка - зачем вызывать srand в конструкторе? Критично, чтобы после каждого нового объекта последовательность случайных чисел повторялась (вряд ли время за секунду успеет за это время перескочить...)?