Гауссовские видимые единицы в рублях

Я хочу реализовать гауссовский RBM. Для этого я хочу сделать нулевое среднее и единичную дисперсию data.my data - набор данных MNIST. Набор данных был взят и получен по следующей ссылке.

Посетите http://www.cs.toronto.edu/~hinton/code/makebatches.m

поэтому я реализовал следующим образом. Но мои данные становятся NAN. Это становится NAN после деления данных со стандартным отклонением.

for epoch = epoch:maxepoch,
fprintf(1,'epoch %d \r',epoch); 
errsum=0;
for batch = 1:numbatches,
fprintf(1,'epoch %d batch %d \r',epoch,batch); 

% НАЧАТЬ ПОЗИТИВНУЮ ФАЗУ

data = batchdata(:,:,batch);

% нулевого среднего и единицы дисперсии

data_mean = mean(data,1);
data=bsxfun(@minus,data,data_mean);
data_std = std(data1,[],1);
data=bsxfun(@rdivide,data,data_std);

Я попробовал это на небольшом наборе примеров. Это хорошо работает. По какой причине станет NAN.

Как избавиться от этого и сделать гауссовский ввод с нулевым средним и единицей дисперсии.

2 ответа

Я бы порекомендовал нормализовать среднее значение и дисперсию ваших данных перед началом обучения GBRBM. Это вы бы могли проверить batchdata Переменная вручную в рабочей области MATLAB. Во время обучения GBRBM я часто вижу NaN как ошибку обучения / проверки, когда моя скорость обучения слишком высока. Это должно помочь установить скорость обучения ниже или равна 0,001.

Вы, кажется, используете неопределенную переменную "data1" в своем коде "data_std = ...", а не "data".

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