Matlab GRBM实现
我正在MATLAB中实现基于高斯输入的RBMMatlab GRBM实现,matlab,rbm,Matlab,Rbm,我正在MATLAB中实现基于高斯输入的RBM vi的维度为100*784,w的维度为784*500,sigma的维度为1*784 p(h | v)=乙状结肠(cj+wij*vi/sigma^2)。当我乘以w*v/sigma^2时,我得到了尺寸误差。 我已经按如下方式实施了它 poshidprobspart = bsxfun(@rdivide,data,sigmas.^2); poshidprobs = 1./(1 + exp(-((vishid * poshidprobspart) + repm
vi
的维度为100*784,w
的维度为784*500,sigma
的维度为1*784
p(h | v)=乙状结肠(cj+wij*vi/sigma^2)
。当我乘以w*v/sigma^2
时,我得到了尺寸误差。
我已经按如下方式实施了它
poshidprobspart = bsxfun(@rdivide,data,sigmas.^2);
poshidprobs = 1./(1 + exp(-((vishid * poshidprobspart) + repmat(hidbiases,numcases,1))));
是什么导致了代码中的错误在代码的部分bsxfun(@rdivide,data,sigmas.^2)中,您需要对齐匹配的非单一维度。换句话说,如果
sigmas
的大小为1x784,而data
的大小为784x500,则需要匹配784维度。您可能想转置sigmas
:
% bsxfun: 784x500 @rdivide 784x1 => 784x500
poshidprobspart = bsxfun(@rdivide,data,(sigmas.^2).');
然后poshidprobspart
将为784x500,然后可以将其相乘:vishid*poshidprobspart
如果vishid
为100x784,则生成100x500矩阵
如果
numcase
是100,而hidviases
是长度为500的行向量,那么您的代码将运行。在代码bsxfun(@rdivide,data,sigmas.^2)
部分,您需要对齐匹配的非单体维度。换句话说,如果sigmas
的大小为1x784,而data
的大小为784x500,则需要匹配784维度。您可能想转置sigmas
:
% bsxfun: 784x500 @rdivide 784x1 => 784x500
poshidprobspart = bsxfun(@rdivide,data,(sigmas.^2).');
然后poshidprobspart
将为784x500,然后可以将其相乘:vishid*poshidprobspart
如果vishid
为100x784,则生成100x500矩阵
如果
numcase
是100,而hidviases
是一个长度为500的行向量,那么您的代码将运行。如果我按以下方式实现,它工作正常
neghidprobspart1=bsxfun(@rdivide,negdata,sigmas.^2);
neghidprobspart2=vishid'*neghidprobspart1';
neghidprobs =1./(exp(-(neghidprobspart2'+repmat(hidbiases,numcases,1))));
如果我按照下面的方式实现,它工作得很好
neghidprobspart1=bsxfun(@rdivide,negdata,sigmas.^2);
neghidprobspart2=vishid'*neghidprobspart1';
neghidprobs =1./(exp(-(neghidprobspart2'+repmat(hidbiases,numcases,1))));
当我这样做时,我得到了以下错误:使用两个输入数组的bsxfun非单例维度的错误必须相互匹配。grbmcd(第74行)中的错误NEGIDPROBSPARTT1=bsxfun(@rdivide,negdata,(sigmas.^2)');什么是
大小(negdata)
和大小(sigmas)
?negdata大小与数据大小相同,sigmas=1*784那么,什么是大小(data)
?784x500<代码>bsxfun(@rdivide,negdata,(sigmas.^2)')如果negdata
为784x500且sigmas
为1x784OK,则代码>工作正常。。。那么,你明白我的建议了吗?您不需要转置negidprobspart2=vishid'*negidprobspart1'中的所有内容
如果您改为转置sigmas
,只要数据
/negdata
/无论什么是784x500。当我这样做时,我得到以下错误。使用两个输入数组的bsxfun非单例维度的错误必须相互匹配。grbmcd(第74行)中的错误NEGIDPROBSPARTT1=bsxfun(@rdivide,negdata,(sigmas.^2)');什么是大小(negdata)
和大小(sigmas)
?negdata大小与数据大小相同,sigmas=1*784那么,什么是大小(data)
?784x500<代码>bsxfun(@rdivide,negdata,(sigmas.^2)')如果negdata
为784x500且sigmas
为1x784OK,则代码>工作正常。。。那么,你明白我的建议了吗?您不需要转置negidprobspart2=vishid'*negidprobspart1'中的所有内容代码>如果你改为转置sigmas
,只要data
/negdata
/无论什么是784x500。我猜negdata
就是data'
。在这种情况下,这和我的建议是一样的。只要对齐非单体维度。我猜negdata
就是data'
。在这种情况下,这和我的建议是一样的。只需对齐非单例维度。请包含错误的全文。请包含错误的全文。