在Matlab中对1D数据进行简单的去噪自动编码器

问题描述:

我正在尝试使用Matlab为1D数据设置一个简单的去噪自动编码器。由于目前存在用于1D数据没有专门输入层的imageInputLayer()功能已被使用:在Matlab中对1D数据进行简单的去噪自动编码器

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 Ñ]与 响应大小不匹配[n11]。

有关应该如何重新配置​​输入/图层的任何想法?如果fullyConnectedLayer被遗漏,那么代码运行良好,但显然然后我没有隐藏层。

+0

我帮不了你,因为我没有工具箱并给出了小的反应,你检查这个解决方法吗? https://nl.mathworks.com/matlabcentral/answers/331865-how-to-match-output-size-in-cnn – 10a

目标输出应该是矩阵,而不是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)';