最近在实现CNN时,用了github上的一个代码,是用matlab 来实现的。感谢作者的付出,但是我在使用代码训练时,出现了几个小问题,如sigm,expand等。
现在在这里对这些问题进行修正,完成代码。

  1. 未定义sigm
    这里需要添加一个函数
function output = sigm(x)
output =1./(1+exp(-x));
end

2.未定义flipall

function X=flipall(X) 
        for dm=1:ndims(X) %矩阵维数
            X=flipdim(X,dm);  % 矩阵翻转
        end
    end

3.未定义与 ‘double’ 类型的输入参数相对应的函数 ‘expand’。
这个首先需要知道这个函数的目的是啥,一步一步的调试到这发现,这个expand的目的就是将矩阵扩维,所以直接添加一个函数,命名为expand_cnn(x,y);举个例子
%https://github.com/rasmusbergpalm/DeepLearnToolbox/issues/156
% size(x) =[4 4 50] y=[m n l];
%size(expand_cnn(x,y)) = [4m 4n 50l]

function expand_bp = expand_cnn(x,y)
    expand_bp = zeros(size(x,1)*y(1),size(x,2)*y(2),size(x,3)*y(3)); %
    test_column = zeros(size(x,1)*y(1),size(x,2)*y(2),size(x,3));;% column operation
    test_row = zeros(size(x,1)*y(1),size(x,2),size(x,3)); % row operation
    row_row = y(1);
    column_column = y(2);
    heigh_heigh = y(3);
    for n =1: size(x,3)
        % row operation
        for row = 1:size(x,1)
                while row_row>0
                     test_row(y(1)*row-(row_row-1),:,n) = x(row,:,n);
                    row_row = row_row-1;
                end
                row_row = y(1);
        end
        % column operation
        for column = 1:size(x,2)
            while column_column>0
                test_column(:,(y(2)*column-(column_column-1)),n) = test_row(:,column,n);
                  column_column =  column_column-1;
            end
            column_column = y(2);
        end
        % third dimension
        while heigh_heigh>0
            expand_bp(:,:,y(3)*n-(heigh_heigh-1)) = test_column(:,:,n);
            heigh_heigh =  heigh_heigh-1;
        end 
        heigh_heigh = y(3);
    end

至此所有的小bug都解决了。。。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐