将阵列重新排列成适合NN训练的形式

问题描述 投票:0回答:1

我正在处理一个大型数据集,我需要将其转换为特定格式以便进一步处理。我正在寻找这方面的建议。

样本输入:

A = [0.99  -0.99
     1     -1
     0.55  -0.55]

样本输出:

val(:,:,1,1)=0.99
val(:,:,2,1)=-0.99
val(:,:,1,2)=1
val(:,:,2,2)=-1
val(:,:,1,3)=0.55
val(:,:,2,3)=-0.55

在研究这个时,我在MATLAB R2018b的CNN工具箱中找到了一个代码

function dummifiedOut = dummify(categoricalIn)
    % iDummify   Convert a categorical input into a dummified output.
    %
    % dummifiedOut(1,1,i,j)=1 if observation j is in class i, and zero
    % otherwise. Therefore, dummifiedOut will be of size [1, 1, K, N],
    % where K is the number of categories and N is the number of
    % observation in categoricalIn.

    %   Copyright 2015-2016 The MathWorks, Inc.

    numObservations = numel(categoricalIn);
    numCategories = numel(categories(categoricalIn));
    dummifiedSize = [1, 1, numCategories, numObservations];
    dummifiedOut = zeros(dummifiedSize);
    categoricalIn = iMakeHorizontal( categoricalIn );
    idx = sub2ind(dummifiedSize(3:4), int32(categoricalIn), 1:numObservations);
    dummifiedOut(idx) = 1;
end
function vec = iMakeHorizontal( vec )
    vec = reshape( vec, 1, numel( vec ) );
end

我们能否以这种方式修改这段代码以产生样本输出?

matlab matrix neural-network dimensions training-data
1个回答
1
投票

要么做rinkert suggested,要么直接使用permute

>> val = permute(A, [4,3,2,1])
val(:,:,1,1) =
    0.9900
val(:,:,2,1) =
   -0.9900
val(:,:,1,2) =
     1
val(:,:,2,2) =
    -1
val(:,:,1,3) =
    0.5500
val(:,:,2,3) =
   -0.5500 

请注意,您发布的函数需要categorical数据,而您有一个简单的double数组。如果你坚持“适应”现有的dummify,你可以这样做:

function dummifiedOut = dummify(categoricalIn)
    dummifiedOut = zeros([1,1,size(categoricalIn)]);
    dummifiedOut(:) = categoricalIn;
end

(...虽然,恕我直言,这没什么意义。)

© www.soinside.com 2019 - 2024. All rights reserved.