使用自动编码器的大输入值

Sas*_*sha 5 matlab autoencoder

我在MATLAB中创建了一个自动编码器神经网络.我在第一层有很大的输入,我必须通过网络的输出层重建.我不能使用大输入,所以我使用sigmfMATLAB的功能将其转换为[0,1]之间.对于所有大值,它给出的值为1.000000.我尝试过使用设置格式,但没有用.

有自动编码器使用大值的解决方法吗?

Pab*_* EM 4

将输入转换为 [0,1] 范围的过程称为标准化,但是,正如您所注意到的,sigmf函数不足以完成此任务。这个链接也许对你有用。

假设您的输入由 N 行 M 列的矩阵给出,其中每行代表一个输入模式,每列代表一个特征。如果您的第一列是:

vec =

   -0.1941
   -2.1384
   -0.8396
    1.3546
   -1.0722
Run Code Online (Sandbox Code Playgroud)

然后你可以使用以下方法将其转换为范围 [0,1]:

%# get max and min
maxVec = max(vec);
minVec = min(vec);

%# normalize to -1...1
vecNormalized = ((vec-minVec)./(maxVec-minVec))

vecNormalized =

    0.5566
         0
    0.3718
    1.0000
    0.3052
Run Code Online (Sandbox Code Playgroud)

正如@Dan 在评论中指出的那样,另一种选择是标准化数据。此过程的目标是将输入缩放为均值 0 和方差 1。在这种情况下,您需要减去列的平均值并除以标准差:

meanVec = mean(vec);
stdVec = std(vec);

vecStandarized = (vec-meanVec)./ stdVec

vecStandarized =

    0.2981
   -1.2121
   -0.2032
    1.5011
   -0.3839
Run Code Online (Sandbox Code Playgroud)