Nueral Network для линейной регрессии: каждый раз разные прогнозы

У меня есть 200 учебных примеров. Я выполнил линейную регрессию с 6 функциями в этом наборе данных, и он работает нормально, поэтому я хочу также запустить nueral networs на нем.

Проблема: каждый раз, когда я запускаю программу, прогноз (пред) отличается, сильно отличается!

input_layer_size  = 6;
hidden_layer_size = 3;   
num_labels = 1;

% Load Training Data

load('capitaldata.mat');

% example size

m = size(X, 1);

% initialize theta

initial_Theta1 = randInitializeWeights(input_layer_size, hidden_layer_size);
initial_Theta2 = randInitializeWeights(hidden_layer_size, num_labels);

% Unroll parameters

initial_nn_params = [initial_Theta1(:) ; initial_Theta2(:)];

% find optimal theta

options = optimset('MaxIter', 50);

%  set regularization parameter

lambda = 1;

% Create "short hand" for the cost function to be minimized

costFunction = @(p) nnCostFunctionLinear(p, input_layer_size, hidden_layer_size, num_labels, X, y, lambda);

% Now, costFunction is a function that takes in only one argument (the neural network parameters)

[nn_params, cost] = fmincg(costFunction, initial_nn_params, options);

% Obtain Theta1 and Theta2 back from nn_params

Theta1 = reshape(nn_params(1:hidden_layer_size * (input_layer_size + 1)), hidden_layer_size, (input_layer_size + 1));

Theta2 = reshape(nn_params((1 + (hidden_layer_size * (input_layer_size + 1))):end), num_labels, (hidden_layer_size + 1));

% test case
test = [18 279 86 59 23 16]; 

pred = predict(Theta1, Theta2, test);

display(pred);

Функции, которые вызываются вышеуказанной программой:

1) randInitializeWeights.m

function W = randInitializeWeights(L_in, L_out)

W = zeros(L_out, 1 + L_in);

epsilon_init = 0.12;

W = rand(L_out , 1 + L_in)  * 2 * epsilon_init - epsilon_init;

end;

2) nnCostFunctionLinear.m должен быть прав, так как результат теста правильный. Дайте мне знать, если вы тоже хотите это увидеть.

Я подозреваю, что проблема заключается в размере набора данных, количестве объектов или весах инициализации.

Заранее спасибо за вашу помощь!

1 ответ

В качестве теста вы можете заполнить генератор случайных чисел одним и тем же значением каждый раз, чтобы каждый раз выдавать одну и ту же последовательность случайных чисел. Ищи

случайное зерно

и название программного обеспечения, которое вы используете, чтобы найти, как установить начальное число для генератора случайных чисел.

Другие вопросы по тегам