4D Convolutional Neural Network in Matlab
    5 views (last 30 days)
  
       Show older comments
    
How to implement a CNN in MATLAB to train a 4D image with the 4th dimension beeing frequency??
0 Comments
Answers (1)
  Parag
 on 7 Mar 2025
        
      Edited: Parag
 on 7 Mar 2025
  
      Hi, in MATLAB, when dealing with 4D images where the fourth dimension represents frequency, there are two key implementation approaches depending on how the frequency information is handled: 
1.Treating Frequency as Additional Channels - Reshape the dataset to merge the frequency dimension into the channel dimension: Xtrain:(H,W,C,F,N)→(H,W,C×F,N) . The CNN treats different frequency bands as additional feature channels, similar to how colour channels (RGB) work. 
2.Treating Frequency as an Additional Input Dimension - Instead of using “imageInputLayer”, use custom 3D convolutions (convolution3dLayer) to process the frequency dimension separately: Xtrain:(H,W,C,F,N) 
While the first approach has simple implementation leveraging built in MATLAB deep learning tools it loses explicit frequency structure. 
MATLAB Implementation of a 3D CNN for 4D Images on random data 
% Define Dummy Data 
imageSize = [32, 32, 3, 10];  % (Height, Width, Channels, Frequency) 
numSamples = 200;  % More samples improve learning 
numClasses = 5;  % Classification task 
% Generate Random 4D Data (height, width, channels, frequency, samples) 
XTrain = rand(imageSize(1), imageSize(2), imageSize(3), imageSize(4), numSamples); 
YTrain = categorical(randi(numClasses, [numSamples, 1])); % Random labels 
% Define a deeper 3D CNN 
layers = [ 
    image3dInputLayer(imageSize, 'Normalization', 'none') 
    % First convolutional block 
    convolution3dLayer([3 3 3], 32, 'Padding', 'same') 
    batchNormalizationLayer 
    reluLayer 
    maxPooling3dLayer([2 2 1], 'Stride', [2 2 1])   
    % Second convolutional block 
    convolution3dLayer([3 3 3], 64, 'Padding', 'same') 
    batchNormalizationLayer 
    reluLayer 
    maxPooling3dLayer([2 2 1], 'Stride', [2 2 1]) 
    % Third convolutional block 
    convolution3dLayer([3 3 3], 128, 'Padding', 'same') 
    batchNormalizationLayer 
    reluLayer 
    % Fourth convolutional block 
    convolution3dLayer([3 3 3], 256, 'Padding', 'same') 
    batchNormalizationLayer 
    reluLayer 
    maxPooling3dLayer([2 2 2], 'Stride', [2 2 2])   
    % Fully connected layers 
    fullyConnectedLayer(512) 
    reluLayer 
    dropoutLayer(0.5)  % Reduces overfitting 
    fullyConnectedLayer(numClasses) 
    softmaxLayer 
    classificationLayer]; 
% Training Options with Adam Optimizer 
options = trainingOptions('adam', ... % Faster convergence than SGDM 
    'InitialLearnRate', 0.001, ... 
    'MaxEpochs', 20, ... % More epochs for better learning 
    'MiniBatchSize', 16, ... 
    'Verbose', true, ... % Ensures loss printing 
    'Plots', 'training-progress'); % Visualize training 
% Train the Network 
net = trainNetwork(XTrain, YTrain, layers, options);
You can also refer this paper for information about 4-d convlutions 
Please refer this MATLAB documentation for “convn” function in MATLAB
0 Comments
See Also
Categories
				Find more on Get Started with Deep Learning Toolbox 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!
