3D convolutional auto encoder
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I try to define a 3D convolutional auto encoder, but when trying to train my training error just stays the same. Here is my structure:
layers = [
image3dInputLayer([120 160 120 1], 'Name', 'Input', 'Normalization',"none") %??
convolution3dLayer([3 3 3], 10, 'Name', 'conv1', "Padding", "same", 'Stride', [1 1 1])
reluLayer('Name', 'relu1')
maxPooling3dLayer([2 2 2], "Stride", [2 2 2], "Name", 'max1')
convolution3dLayer([3 3 3], 10, 'Name', 'conv2', "Padding", "same", 'Stride', [1 1 1])
reluLayer('Name', 'relu2')
maxPooling3dLayer([2 2 2], "Stride", [2 2 2], "Name", 'max2')
convolution3dLayer([3 3 3], 10, 'Name', 'conv3', "Padding", "same", 'Stride', [1 1 1])
reluLayer('Name', 'relu3')
maxPooling3dLayer([2 2 2], "Stride", [2 2 2], "Name", 'max3')
dropoutLayer(0.5, "Name", 'drop')
convolution3dLayer([3 3 3], 10, 'Name', 'conv4', "Padding", "same", 'Stride', [1 1 1])
reluLayer('Name', 'relu4')
resize3dLayer("OutputSize",[30 40 30], 'Method', "nearest", 'Name','up1')
convolution3dLayer([3 3 3], 10, 'Name', 'conv5', "Padding", "same", 'Stride', [1 1 1])
reluLayer('Name', 'relu5')
resize3dLayer("OutputSize",[60 80 60], 'Method',"nearest", 'Name','up2')
convolution3dLayer([3 3 3], 10, 'Name', 'conv6', "Padding", "same", 'Stride', [1 1 1])
reluLayer('Name', 'relu6')
convolution3dLayer([1 1 1], 1, 'Name', 'concatenation', "Padding", "same", 'Stride', [1 1 1])
resize3dLayer("OutputSize",[120 160 120], 'Method', "nearest", 'Name','up31') %??
sigmoidLayer('Name', 'sigmoid') %??
regressionLayer('Name', 'reglayer')
];
lgraph = layerGraph(layers);
Especially I would like to know if the combining of the final feature maps is done correctly with the last convolution3dLayer, since I couldn't find a suitable layer for it in 3D. Also, if the use of sigmoid before the output is suitable? If I use normal reluLayer, the training error just goes to Inf.
I do the training the following way:
imdsTrain = transform(imdsTrain, @resize2AE,'IncludeInfo',true);
[net, info] = trainNetwork(imdsTrain, lgraph, options);
% Where the resize2AE function is
function [dataOut,info] = resize2AE(data,info)
numRows = size(data,1);
dataOut = cell(numRows,2);
% since ReadSize is expected to be >1, data comes in cell form containing
% multiple images
for idx = 1:numRows
% get the image out of the datacell
D = data{idx,1};
D = single(D);
D = imresize3(D, [120, 160, 120]);
D = normalize(D, 'range'); % normalize to [0,1] range
dataOut(idx,:) = {D,D}; % This is supposed to work for AE!!!!!!!
end
end
Can you spot some errors?
0 commentaires
Réponses (0)
Voir également
Catégories
En savoir plus sur Image Data Workflows dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!