2017-08-29 35 views
0

我正在嘗試使用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

回答

0

目標輸出應該是矩陣,而不是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)'; 
相關問題