我想实现高斯RBM。因为我想要使数据的均值和单位方差为零。我的数据是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的原因是什么。
如何摆脱这种情况并使高斯输入具有零均值和单位方差。
答案 0 :(得分:1)
我建议在开始GBRBM培训之前规范化数据的均值和方差。这样您就可以在MATLAB工作区中手动检查batchdata
变量。
在训练GBRBM时,当我的学习率太高时,我经常将NaN视为训练/验证错误。它应该有助于将学习率设置为低于或等于0.001。
答案 1 :(得分:0)
您似乎在“data_std = ...”代码中使用了未定义的变量“data1”而不是“数据”。