一种无需迭代即可对矩阵中的列向量进行热编码的方法

时间:2019-12-06 22:22:44

标签: matlab matrix neural-network octave

我正在实现一个神经网络,并试图根据每列的最大值对列向量矩阵进行热编码。以前,我一直在逐个向量地遍历矩阵向量,但是有人告诉我这是不必要的,实际上我可以同时对矩阵中的每个列向量进行一次热编码。不幸的是,在仔细阅读了SO,GitHub和MathWorks之后,似乎什么也做不完。我在下面列出了我以前的代码。请帮忙!谢谢:)

更新: 这就是我要完成的工作...除了这只是将整个矩阵中的最大值更改为1。我想将每个COLUMN中的最大值更改为1。

one_hots = bsxfun(@eq, mini_batch_activations, max(mini_batch_activations(:))) 

更新2: 这是我想要的,但仅适用于行。我需要专栏。

V = max(mini_batch_activations,[],2);
      idx = mini_batch_activations == V;

迭代代码:

     % This is the matrix I want to one hot encode
     mini_batch_activations = activations{length(layers)};

     %For each vector in the mini_batch:
     for m = 1:size(mini_batch_activations, 2)

        % Isolate column vector for mini_batch
        vector = mini_batch_activations(:,m);

        % One hot encode vector to compare to target vector
        one_hot = zeros(size(mini_batch_activations, 1),1);
        [max_val,ind] = max(vector);
        one_hot(ind) = 1;

        % Isolate corresponding column vector in targets
        mini_batch = mini_batch_y{k};
        target_vector = mini_batch(:,m);

        % Compare one_hot to target vector , and increment result if they match
        if isequal(one_hot, target_vector)
          num_correct = num_correct + 1;
        endif

        ...

     endfor

1 个答案:

答案 0 :(得分:1)

您已获得每一列的最大值:

V = max(mini_batch_activations,[],1); % note 1, not 2!

现在您需要做的就是相等比较,输出是一个逻辑数组,可以很容易地转换为0和1。请注意,MATLAB和Octave进行隐式单例扩展:

one_hot = mini_batch_activations==V;