Ошибка в примере кода, приведенного в документации MATLAB для обучения нескольких NN - PullRequest
1 голос
/ 13 мая 2019

В документации мы обучаем 10 различным нейронным сетям, каждая из которых инициализируется с различными весами и уклонами. net - это переменная для построения нейронных сетей, x1 - это обучающий набор данных, t1 - известные метки, используемые в обучении, x2 - это тестовый набор данных, а t2 - это тестовая метка. Каждая нейронная сеть хранится в переменной ячейки NN{}.

После обучения оценка выполняется с использованием набора тестов t2 и x2. Однако вычисление mse выполняется с использованием mse(net, t2, y2) Я думаю, что правильное утверждение должно было быть mse(NN{i}, t2, y2), поскольку NN{} является обученная модель, а не net, которая является просто структурой. Ниже приведен код, указанный в ссылке.

Должен ли вызов функции быть mse(NN{i}, t2, y2) вместо mse(net, t2, y2)?

net = feedforwardnet(10);
numNN = 10;
NN = cell(1, numNN);
perfs = zeros(1, numNN);
for i = 1:numNN
  fprintf('Training %d/%d\n', i, numNN);
  NN{i} = train(net, x1, t1);
  y2 = NN{i}(x2);
  perfs(i) = mse(net, t2, y2);
end

1 Ответ

3 голосов
/ 14 мая 2019

mse - это функция производительности сети.Он измеряет производительность сети в соответствии со средним квадратом ошибок.

perf = mse(net,t,y,ew) принимает следующие аргументы:

  • net Нейронная сеть
  • t Матрицаили массив ячеек целей
  • y Матрица или массив ячеек выходов
  • ew Вес ошибки (необязательно)

Согласно документация mse.Таким образом, первый параметр должен быть структурой типа neural network, в этом примере NN{i} содержится в y2, то есть матрица выходных данных.

...