我想实现高斯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的原因是什么。
如何消除这一点,使高斯输入具有零均值和单位方差。
我建议在开始GBRBM培训之前,对数据的均值和方差进行归一化。这将使您能够在MATLAB工作空间中手动检查batchdata
变量。在训练GBRBM时,当我的学习率过高时,我经常将NaN视为训练/验证错误。将学习率设置为0.001以下应该会有所帮助。
您在"data_std=…"代码中似乎使用了一个未定义的变量"data1",而不是"data"。