在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
被遗漏,那么代码运行良好,但显然然后我没有隐藏层。
答
目标输出应该是矩阵,而不是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)';
我帮不了你,因为我没有工具箱并给出了小的反应,你检查这个解决方法吗? https://nl.mathworks.com/matlabcentral/answers/331865-how-to-match-output-size-in-cnn – 10a