【问题标题】:Simple denoising autoencoder for 1D data in MatlabMatlab中一维数据的简单去噪自动编码器
【发布时间】:2018-02-07 08:04:15
【问题描述】:

我正在尝试使用 Matlab 为一维数据设置一个简单的去噪自动编码器。由于目前没有专门的一维数据输入层,因此必须使用 imageInputLayer() 函数:

function net = DenoisingAutoencoder(data)
[N, n] = size(data);

%setting up input
X = zeros([n 1 1 N]);
for i = 1:n
    for j = 1:N
        X(i, 1, 1, j) = data(j,i);
    end
end

% noisy X : 1/10th of elements are set to 0
Xnoisy = X;
mask1 = (mod(randi(10, size(X)), 7) ~= 0); 
Xnoisy = Xnoisy .* mask1;

layers = [imageInputLayer([n 1 1]) fullyConnectedLayer(n) regressionLayer()];

opts = trainingOptions('sgdm');
net = trainNetwork(X, Xnoisy, layers, opts);

但是,代码失败并显示以下错误消息:

最后一层的输出大小[1 1 n]不匹配 响应大小 [n 1 1]。

关于应该如何重新配置​​输入/层有什么想法吗?如果fullyConnectedLayer 被忽略,那么代码运行良好,但显然我没有隐藏层。

【问题讨论】:

标签: matlab neural-network deep-learning autoencoder


【解决方案1】:

目标输出应该是矩阵,而不是 4D 张量。

这是之前代码的工作版本:

function DenoisingAutoencoder(data)
[N, n] = size(data);
X = data;
Xoriginal = data;
Xout = data';

% corrupting the input
zeroMask = (mod(randi(100, size(X)), 99) ~= 0); 
X = X + randn(size(X))*0.05; 
X = X .* zeroMask;

X4D = reshape(X, [1 n 1 N]);

layers = [imageInputLayer([1 n]) fullyConnectedLayer(n) regressionLayer()];

opts = trainingOptions('sgdm');

net = trainNetwork(X4D, Xout, layers, opts);
R = predict(net, X4D)';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-05
    • 2016-06-03
    • 2020-12-09
    • 1970-01-01
    • 2019-12-12
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多