Skip to main content
. 2025 Jul 22;17(15):2428. doi: 10.3390/cancers17152428
  Number of layers: 71
  Number of connections: 78
  Training setup file: “params.mat”
  This script is run to create the network layers, import training and validation data, and train the network.
  ➀ Load Training Setup Data:
  trainingSetup = load(“params.mat”)
  ➁ Import Data:
  imdsTrain = trainingSetup.imdsTrain;
  imdsValidation = trainingSetup.imdsValidation;
  % Resize the images to match the network input layer.
  augimdsTrain = augmentedImageDatastore([224 224 3],imdsTrain);
  augimdsValidation = augmentedImageDatastore([224 224 3],imdsValidation);
  ➂ Set Training Options:
  opts = trainingOptions(“sgdm”,…
    “ExecutionEnvironment”,“auto”,…
    “InitialLearnRate”,0.001,…
    “MaxEpochs”,5,…
    “Shuffle”,“every-epoch”,…
    “Plots”,“training-progress”,…
    “ValidationData”,augimdsValidation);
  ➃ Create Layer Graph:
  lgraph = layerGraph();
  Add Layer Branches:
  tempLayers = [
    imageInputLayer([224 224 3],“Name”,“data”,“Normalization”,“zscore”,“Mean”,trainingSetup.data.Mean,“StandardDeviation”,trainingSetup.data.StandardDeviation)
    convolution2dLayer([7 7],64,“Name”,“conv1”,“BiasLearnRateFactor”,0,“Padding”,[3 3 3 3],“Stride”,[2 2],“Bias”,trainingSetup.conv1.Bias,“Weights”,trainingSetup.conv1.Weights)
    batchNormalizationLayer(“Name”,“bn_conv1”,“Offset”,trainingSetup.bn_conv1.Offset,“Scale”,trainingSetup.bn_conv1.Scale,“TrainedMean”,trainingSetup.bn_conv1.TrainedMean,“TrainedVariance”,trainingSetup.bn_conv1.TrainedVariance)
    reluLayer(“Name”,“conv1_relu”)
    maxPooling2dLayer([3 3],“Name”,“pool1”,“Padding”,[1 1 1 1],“Stride”,[2 2])];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    convolution2dLayer([3 3],64,“Name”,“res2a_branch2a”,“BiasLearnRateFactor”,0,“Padding”,[1 1 1 1],“Bias”,trainingSetup.res2a_branch2a.Bias,“Weights”,trainingSetup.res2a_branch2a.Weights)
    batchNormalizationLayer(“Name”,“bn2a_branch2a”,“Offset”,trainingSetup.bn2a_branch2a.Offset,“Scale”,trainingSetup.bn2a_branch2a.Scale,“TrainedMean”,trainingSetup.bn2a_branch2a.TrainedMean,“TrainedVariance”,trainingSetup.bn2a_branch2a.TrainedVariance)
    reluLayer(“Name”,“res2a_branch2a_relu”)
    convolution2dLayer([3 3],64,“Name”,“res2a_branch2b”,“BiasLearnRateFactor”,0,“Padding”,[1 1 1 1],“Bias”,trainingSetup.res2a_branch2b.Bias,“Weights”,trainingSetup.res2a_branch2b.Weights)
    batchNormalizationLayer(“Name”,“bn2a_branch2b”,“Offset”,trainingSetup.bn2a_branch2b.Offset,“Scale”,trainingSetup.bn2a_branch2b.Scale,“TrainedMean”,trainingSetup.bn2a_branch2b.TrainedMean,“TrainedVariance”,trainingSetup.bn2a_branch2b.TrainedVariance)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    additionLayer(2,“Name”,“res2a”)
    reluLayer(“Name”,“res2a_relu”)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    convolution2dLayer([3 3],64,“Name”,“res2b_branch2a”,“BiasLearnRateFactor”,0,“Padding”,[1 1 1 1],“Bias”,trainingSetup.res2b_branch2a.Bias,“Weights”,trainingSetup.res2b_branch2a.Weights)
    batchNormalizationLayer(“Name”,“bn2b_branch2a”,“Offset”,trainingSetup.bn2b_branch2a.Offset,“Scale”,trainingSetup.bn2b_branch2a.Scale,“TrainedMean”,trainingSetup.bn2b_branch2a.TrainedMean,“TrainedVariance”,trainingSetup.bn2b_branch2a.TrainedVariance)
    reluLayer(“Name”,“res2b_branch2a_relu”)
    convolution2dLayer([3 3],64,“Name”,“res2b_branch2b”,“BiasLearnRateFactor”,0,“Padding”,[1 1 1 1],“Bias”,trainingSetup.res2b_branch2b.Bias,“Weights”,trainingSetup.res2b_branch2b.Weights)
    batchNormalizationLayer(“Name”,“bn2b_branch2b”,“Offset”,trainingSetup.bn2b_branch2b.Offset,“Scale”,trainingSetup.bn2b_branch2b.Scale,“TrainedMean”,trainingSetup.bn2b_branch2b.TrainedMean,“TrainedVariance”,trainingSetup.bn2b_branch2b.TrainedVariance)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    additionLayer(2,“Name”,“res2b”)
    reluLayer(“Name”,“res2b_relu”)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    convolution2dLayer([3 3],128,“Name”,“res3a_branch2a”,“BiasLearnRateFactor”,0,“Padding”,[1 1 1 1],“Stride”,[2 2],“Bias”,trainingSetup.res3a_branch2a.Bias,“Weights”,trainingSetup.res3a_branch2a.Weights)
    batchNormalizationLayer(“Name”,“bn3a_branch2a”,“Offset”,trainingSetup.bn3a_branch2a.Offset,“Scale”,trainingSetup.bn3a_branch2a.Scale,“TrainedMean”,trainingSetup.bn3a_branch2a.TrainedMean,“TrainedVariance”,trainingSetup.bn3a_branch2a.TrainedVariance)
    reluLayer(“Name”,“res3a_branch2a_relu”)
    convolution2dLayer([3 3],128,“Name”,“res3a_branch2b”,“BiasLearnRateFactor”,0,“Padding”,[1 1 1 1],“Bias”,trainingSetup.res3a_branch2b.Bias,“Weights”,trainingSetup.res3a_branch2b.Weights)
    batchNormalizationLayer(“Name”,“bn3a_branch2b”,“Offset”,trainingSetup.bn3a_branch2b.Offset,“Scale”,trainingSetup.bn3a_branch2b.Scale,“TrainedMean”,trainingSetup.bn3a_branch2b.TrainedMean,“TrainedVariance”,trainingSetup.bn3a_branch2b.TrainedVariance)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    convolution2dLayer([1 1],128,“Name”,“res3a_branch1”,“BiasLearnRateFactor”,0,“Stride”,[2 2],“Bias”,trainingSetup.res3a_branch1.Bias,“Weights”,trainingSetup.res3a_branch1.Weights)
    batchNormalizationLayer(“Name”,“bn3a_branch1”,“Offset”,trainingSetup.bn3a_branch1.Offset,“Scale”,trainingSetup.bn3a_branch1.Scale,“TrainedMean”,trainingSetup.bn3a_branch1.TrainedMean,“TrainedVariance”,trainingSetup.bn3a_branch1.TrainedVariance)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    additionLayer(2,“Name”,“res3a”)
    reluLayer(“Name”,“res3a_relu”)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    convolution2dLayer([3 3],128,“Name”,“res3b_branch2a”,“BiasLearnRateFactor”,0,“Padding”,[1 1 1 1],“Bias”,trainingSetup.res3b_branch2a.Bias,“Weights”,trainingSetup.res3b_branch2a.Weights)
    batchNormalizationLayer(“Name”,“bn3b_branch2a”,“Offset”,trainingSetup.bn3b_branch2a.Offset,“Scale”,trainingSetup.bn3b_branch2a.Scale,“TrainedMean”,trainingSetup.bn3b_branch2a.TrainedMean,“TrainedVariance”,trainingSetup.bn3b_branch2a.TrainedVariance)
    reluLayer(“Name”,“res3b_branch2a_relu”)
    convolution2dLayer([3 3],128,“Name”,“res3b_branch2b”,“BiasLearnRateFactor”,0,“Padding”,[1 1 1 1],“Bias”,trainingSetup.res3b_branch2b.Bias,“Weights”,trainingSetup.res3b_branch2b.Weights)
    batchNormalizationLayer(“Name”,“bn3b_branch2b”,“Offset”,trainingSetup.bn3b_branch2b.Offset,“Scale”,trainingSetup.bn3b_branch2b.Scale,“TrainedMean”,trainingSetup.bn3b_branch2b.TrainedMean,“TrainedVariance”,trainingSetup.bn3b_branch2b.TrainedVariance)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    additionLayer(2,“Name”,“res3b”)
    reluLayer(“Name”,“res3b_relu”)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    convolution2dLayer([3 3],256,“Name”,“res4a_branch2a”,“BiasLearnRateFactor”,0,“Padding”,[1 1 1 1],“Stride”,[2 2],“Bias”,trainingSetup.res4a_branch2a.Bias,“Weights”,trainingSetup.res4a_branch2a.Weights)
    batchNormalizationLayer(“Name”,“bn4a_branch2a”,“Offset”,trainingSetup.bn4a_branch2a.Offset,“Scale”,trainingSetup.bn4a_branch2a.Scale,“TrainedMean”,trainingSetup.bn4a_branch2a.TrainedMean,“TrainedVariance”,trainingSetup.bn4a_branch2a.TrainedVariance)
    reluLayer(“Name”,“res4a_branch2a_relu”)
    convolution2dLayer([3 3],256,“Name”,“res4a_branch2b”,“BiasLearnRateFactor”,0,“Padding”,[1 1 1 1],“Bias”,trainingSetup.res4a_branch2b.Bias,“Weights”,trainingSetup.res4a_branch2b.Weights)
    batchNormalizationLayer(“Name”,“bn4a_branch2b”,“Offset”,trainingSetup.bn4a_branch2b.Offset,“Scale”,trainingSetup.bn4a_branch2b.Scale,“TrainedMean”,trainingSetup.bn4a_branch2b.TrainedMean,“TrainedVariance”,trainingSetup.bn4a_branch2b.TrainedVariance)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    convolution2dLayer([1 1],256,“Name”,“res4a_branch1”,“BiasLearnRateFactor”,0,“Stride”,[2 2],“Bias”,trainingSetup.res4a_branch1.Bias,“Weights”,trainingSetup.res4a_branch1.Weights)
    batchNormalizationLayer(“Name”,“bn4a_branch1”,“Offset”,trainingSetup.bn4a_branch1.Offset,“Scale”,trainingSetup.bn4a_branch1.Scale,“TrainedMean”,trainingSetup.bn4a_branch1.TrainedMean,“TrainedVariance”,trainingSetup.bn4a_branch1.TrainedVariance)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    additionLayer(2,“Name”,“res4a”)
    reluLayer(“Name”,“res4a_relu”)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    convolution2dLayer([3 3],256,“Name”,“res4b_branch2a”,“BiasLearnRateFactor”,0,“Padding”,[1 1 1 1],“Bias”,trainingSetup.res4b_branch2a.Bias,“Weights”,trainingSetup.res4b_branch2a.Weights)
    batchNormalizationLayer(“Name”,“bn4b_branch2a”,“Offset”,trainingSetup.bn4b_branch2a.Offset,“Scale”,trainingSetup.bn4b_branch2a.Scale,“TrainedMean”,trainingSetup.bn4b_branch2a.TrainedMean,“TrainedVariance”,trainingSetup.bn4b_branch2a.TrainedVariance)
    reluLayer(“Name”,“res4b_branch2a_relu”)
    convolution2dLayer([3 3],256,“Name”,“res4b_branch2b”,“BiasLearnRateFactor”,0,“Padding”,[1 1 1 1],“Bias”,trainingSetup.res4b_branch2b.Bias,“Weights”,trainingSetup.res4b_branch2b.Weights)
    batchNormalizationLayer(“Name”,“bn4b_branch2b”,“Offset”,trainingSetup.bn4b_branch2b.Offset,“Scale”,trainingSetup.bn4b_branch2b.Scale,“TrainedMean”,trainingSetup.bn4b_branch2b.TrainedMean,“TrainedVariance”,trainingSetup.bn4b_branch2b.TrainedVariance)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    additionLayer(2,“Name”,“res4b”)
    reluLayer(“Name”,“res4b_relu”)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    convolution2dLayer([3 3],512,“Name”,“res5a_branch2a”,“BiasLearnRateFactor”,0,“Padding”,[1 1 1 1],“Stride”,[2 2],“Bias”,trainingSetup.res5a_branch2a.Bias,“Weights”,trainingSetup.res5a_branch2a.Weights)
    batchNormalizationLayer(“Name”,“bn5a_branch2a”,“Offset”,trainingSetup.bn5a_branch2a.Offset,“Scale”,trainingSetup.bn5a_branch2a.Scale,“TrainedMean”,trainingSetup.bn5a_branch2a.TrainedMean,“TrainedVariance”,trainingSetup.bn5a_branch2a.TrainedVariance)
    reluLayer(“Name”,“res5a_branch2a_relu”)
    convolution2dLayer([3 3],512,“Name”,“res5a_branch2b”,“BiasLearnRateFactor”,0,“Padding”,[1 1 1 1],“Bias”,trainingSetup.res5a_branch2b.Bias,“Weights”,trainingSetup.res5a_branch2b.Weights)
    batchNormalizationLayer(“Name”,“bn5a_branch2b”,“Offset”,trainingSetup.bn5a_branch2b.Offset,“Scale”,trainingSetup.bn5a_branch2b.Scale,“TrainedMean”,trainingSetup.bn5a_branch2b.TrainedMean,“TrainedVariance”,trainingSetup.bn5a_branch2b.TrainedVariance)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    convolution2dLayer([1 1],512,“Name”,“res5a_branch1”,“BiasLearnRateFactor”,0,“Stride”,[2 2],“Bias”,trainingSetup.res5a_branch1.Bias,“Weights”,trainingSetup.res5a_branch1.Weights)
    batchNormalizationLayer(“Name”,“bn5a_branch1”,“Offset”,trainingSetup.bn5a_branch1.Offset,“Scale”,trainingSetup.bn5a_branch1.Scale,“TrainedMean”,trainingSetup.bn5a_branch1.TrainedMean,“TrainedVariance”,trainingSetup.bn5a_branch1.TrainedVariance)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    additionLayer(2,“Name”,“res5a”)
    reluLayer(“Name”,“res5a_relu”)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    convolution2dLayer([3 3],512,“Name”,“res5b_branch2a”,“BiasLearnRateFactor”,0,“Padding”,[1 1 1 1],“Bias”,trainingSetup.res5b_branch2a.Bias,“Weights”,trainingSetup.res5b_branch2a.Weights)
    batchNormalizationLayer(“Name”,“bn5b_branch2a”,“Offset”,trainingSetup.bn5b_branch2a.Offset,“Scale”,trainingSetup.bn5b_branch2a.Scale,“TrainedMean”,trainingSetup.bn5b_branch2a.TrainedMean,“TrainedVariance”,trainingSetup.bn5b_branch2a.TrainedVariance)
    reluLayer(“Name”,“res5b_branch2a_relu”)
    convolution2dLayer([3 3],512,“Name”,“res5b_branch2b”,“BiasLearnRateFactor”,0,“Padding”,[1 1 1 1],“Bias”,trainingSetup.res5b_branch2b.Bias,“Weights”,trainingSetup.res5b_branch2b.Weights)
    batchNormalizationLayer(“Name”,“bn5b_branch2b”,“Offset”,trainingSetup.bn5b_branch2b.Offset,“Scale”,trainingSetup.bn5b_branch2b.Scale,“TrainedMean”,trainingSetup.bn5b_branch2b.TrainedMean,“TrainedVariance”,trainingSetup.bn5b_branch2b.TrainedVariance)];
  lgraph = addLayers(lgraph,tempLayers);
  tempLayers = [
    additionLayer(2,“Name”,“res5b”)
    reluLayer(“Name”,“res5b_relu”)
    globalAveragePooling2dLayer(“Name”,“pool5”)
    fullyConnectedLayer(2,“Name”,“fc”)
    softmaxLayer(“Name”,“prob”)
    classificationLayer(“Name”,“classoutput”)];
  lgraph = addLayers(lgraph,tempLayers);
  % clean up helper variable
  clear tempLayers;
  ➄ Connect Layer Branches:
  lgraph = connectLayers(lgraph,“pool1”,“res2a_branch2a”);
  lgraph = connectLayers(lgraph,“pool1”,“res2a/in2”);
  lgraph = connectLayers(lgraph,“bn2a_branch2b”,“res2a/in1”);
  lgraph = connectLayers(lgraph,“res2a_relu”,“res2b_branch2a”);
  lgraph = connectLayers(lgraph,“res2a_relu”,“res2b/in2”);
  lgraph = connectLayers(lgraph,“bn2b_branch2b”,“res2b/in1”);
  lgraph = connectLayers(lgraph,“res2b_relu”,“res3a_branch2a”);
  lgraph = connectLayers(lgraph,“res2b_relu”,“res3a_branch1”);
  lgraph = connectLayers(lgraph,“bn3a_branch2b”,“res3a/in1”);
  lgraph = connectLayers(lgraph,“bn3a_branch1”,“res3a/in2”);
  lgraph = connectLayers(lgraph,“res3a_relu”,“res3b_branch2a”);
  lgraph = connectLayers(lgraph,“res3a_relu”,“res3b/in2”);
  lgraph = connectLayers(lgraph,“bn3b_branch2b”,“res3b/in1”);
  lgraph = connectLayers(lgraph,“res3b_relu”,“res4a_branch2a”);
  lgraph = connectLayers(lgraph,“res3b_relu”,“res4a_branch1”);
  lgraph = connectLayers(lgraph,“bn4a_branch2b”,“res4a/in1”);
  lgraph = connectLayers(lgraph,“bn4a_branch1”,“res4a/in2”);
  lgraph = connectLayers(lgraph,“res4a_relu”,“res4b_branch2a”);
  lgraph = connectLayers(lgraph,“res4a_relu”,“res4b/in2”);
  lgraph = connectLayers(lgraph,“bn4b_branch2b”,“res4b/in1”);
  lgraph = connectLayers(lgraph,“res4b_relu”,“res5a_branch2a”);
  lgraph = connectLayers(lgraph,“res4b_relu”,“res5a_branch1”);
  lgraph = connectLayers(lgraph,“bn5a_branch2b”,“res5a/in1”);
  lgraph = connectLayers(lgraph,“bn5a_branch1”,“res5a/in2”);
  lgraph = connectLayers(lgraph,“res5a_relu”,“res5b_branch2a”);
  lgraph = connectLayers(lgraph,“res5a_relu”,“res5b/in2”);
  lgraph = connectLayers(lgraph,“bn5b_branch2b”,“res5b/in1”);
  ➅ Train Network:
  [net, traininfo] = trainNetwork(augimdsTrain,lgraph,opts);
  Additional code
  ➆ Grad-CAM:
  label = classify(trainedNetwork_1,Image)
  scoreMap = gradCAM(trainedNetwork_1,Image,label);
  figure
  imshow(Image)
  hold on
  imagesc(scoreMap,‘AlphaData’,0.5)
  colormap jet
  ➇ ImageLIME:
  label = classify(trainedNetwork_1,Image)
  scoreMap = imageLIME(trainedNetwork_1,Image,label);
  figure
  imshow(Image)
  hold on
  imagesc(scoreMap,‘AlphaData’,0.5)
  colormap jet
  ➈ Occlusion sensitivity:
  label = classify(trainedNetwork_1,Image)
  scoreMap = occlusionSensitivity(trainedNetwork_1,Image,label);
  figure
  imshow(Image)
  hold on
  imagesc(scoreMap,‘AlphaData’,0.5)
  colormap jet