Гауссовские видимые единицы в рублях
Я хочу реализовать гауссовский 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".