Problem with using convolutional Autoencoder

3 views (last 30 days)
Hi,
I am using convolutional autoencoder to reconstruct fingerprint images how ever i am recieveing error
This is the code i am using
close all;
clc;
%% Initalize the data
dataDir= fullfile('Data/');
exts = {'.jpg','.png','.tif','BMP'};
imds = imageDatastore(fullfile(dataDir),...
'IncludeSubfolders',true,'FileExtensions','.jpg','LabelSource','foldernames');
countEachLabel(imds);
[TrainData, TestData] = splitEachLabel(imds, 0.5);
size(TrainData);
countEachLabel(TrainData);
numImages = numel(TrainData.Files);
for i = 1:numImages
img = readimage(TrainData, i);
img=rgb2gray(img);
img3= im2double(img);
scale = 0.5;
img8 = imresize(img3,scale);
img4= imshow(img8, 'InitialMagnification',800);
drawnow;
Train{i} = (img8); %#ok<SAGROW>
end
layers = [
imageInputLayer([28 28 3],"Name","imageinput","Normalization","none")
convolution2dLayer([3 3],64,"Name","conv_1","Padding","same")
leakyReluLayer(0.01,"Name","leakyrelu_1")
convolution2dLayer([3 3],128,"Name","conv_2","Padding","same")
leakyReluLayer(0.01,"Name","leakyrelu_3")
convolution2dLayer([3 3],128,"Name","conv_3","Padding","same")
leakyReluLayer(0.01,"Name","leakyrelu_4")
convolution2dLayer([3 3],64,"Name","conv_4","Padding","same")
batchNormalizationLayer("Name","batchnorm")
reluLayer("Name","relu1")
dropoutLayer(0.5,"Name","drop")
convolution2dLayer([3 3],1,"Name","conv_5","Padding","same")
leakyReluLayer(0.01,"Name","leakyrelu_5")
regressionLayer("Name","regressionoutput")];
autoenc = trainAutoencoder(Train,layers,'MaxEpochs',400,...
'DecoderTransferFunction','purelin','EncoderTransferFunction','satlin','L2WeightRegularization',0.004,'SparsityRegularization',4,'SparsityProportion',0.15);
numImages = numel(TestData.Files);
for i = 1:numImages
img5 = readimage(TestData, i);
img5=rgb2gray(img5);
img6= im2double(img5);
scale = 0.5;
img9 = imresize(img6,scale);
img7= imshow(img9, 'InitialMagnification', 800);
drawnow;
Test{i} = (img9); %#ok<SAGROW>
end
xReconstructed = predict(autoenc,Test);
%% Test Images
figure();
for i = 1:16
subplot(4,5,i);
imshow(TestData.Files{i});
end
%% Reconstructed images from TestData
figure();
for i = 1:16
subplot(4,5,i);
reconstructed = xReconstructed{i};
reconstructed(imbinarize(reconstructed)) = 1;
imshow(reconstructed)
end
This is the error
Error using Autoencoder.parseInputArguments (line 485)
'HiddenSize' must be an integer greater than 0.
Error in trainAutoencoder (line 107)
paramsStruct = Autoencoder.parseInputArguments(varargin{:});
Error in data_process1 (line 45)
autoenc = trainAutoencoder(Train,layers,'MaxEpochs',400,...
Kindly looking for your su[port
Best

Answers (1)

Madhav Thakker
Madhav Thakker on 15 Mar 2021
Hi Abdussalam,
The trainAutoencoder function expects the second argument as hiddenSize and not layers and create a sparse autoencoder.
I understand you want to create a convolutional auto-encoder. You can do so by using trainNetwork function and using layers to train a convolutional auto-encoder.
Hope this helps.

Categories

Find more on Image Data Workflows in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!