我正在实现一个神经网络,并试图根据每一列的最大值对列向量矩阵进行热编码。以前,我一直在逐个向量地迭代矩阵向量,但是有人告诉我这是不必要的,实际上我可以同时对矩阵中的每个列向量进行一次热编码。不幸的是,在仔细阅读了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
您已获得每一列的最大值:
V = max(mini_batch_activations,[],1); % note 1, not 2!
现在您需要做的就是相等比较,输出是一个逻辑数组,可以很容易地转换为0和1。请注意,MATLAB和Octave进行隐式单例扩展:
one_hot = mini_batch_activations==V;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句