Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab GRBM实现_Matlab_Rbm - Fatal编程技术网

Matlab GRBM实现

Matlab 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

我正在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) + 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'
。在这种情况下,这和我的建议是一样的。只需对齐非单例维度。请包含错误的全文。请包含错误的全文。