我在MATLAB中实现基于高斯输入的RBM。
vi
维度为100 * 784,w
维度为784 * 500,sigma
维度为1 * 784。
p(h|v)= sigmoid(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))));
代码
中导致错误的原因答案 0 :(得分: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矩阵。
如果numcases
为100且hidviases
是长度为500的行向量,那么您的代码将会运行。
答案 1 :(得分:0)
如果按照以下方式实施,它可以正常工作。
neghidprobspart1=bsxfun(@rdivide,negdata,sigmas.^2);
neghidprobspart2=vishid'*neghidprobspart1';
neghidprobs =1./(exp(-(neghidprobspart2'+repmat(hidbiases,numcases,1))));