Es bastante difícil con los modelos que trae la toolbox construir la variante tipo Xception, pero con una cierta complejidad sí se puede hacer una variante Inception. Vamos a verlo en un ejemplo de reconocimiento de dígitos. Puedes probar los siguientes comandos:

% creamos una primera cadena lineal que sólo tiene una de las ramas de la variante
capas= [
%entrada	
    imageInputLayer([28 28 1],'Name','ent')
    %convolución 2D
    convolution2dLayer(ancho1,numproc1,'Name','conv_1')
        reluLayer('Name','relu_1')
    %primera rama de variante
    convolution2dLayer(ancho21,numproc21,'Padding','same','Name','conv_2_1')
    reluLayer('Name','relu_2_1')
%aquí se unirán las ramas
	depthConcatenationLayer(numramas,'Name','union')
%otra convolución
    convolution2dLayer(ancho3,numproc3,'Name','conv_3')
    reluLayer('Name','relu_3')
%reducción    
    averagePooling2dLayer(anchored,'Stride',anchored,'Name','prom3')
%paso a parte no convolutiva-capa oculta
    fullyConnectedLayer(numoc,'Name','comp1')
    reluLayer('Name','relu_comp')
%salida
    fullyConnectedLayer(10,'Name','comp2')
    softmaxLayer('Name','sal')
%para usar error entrópico
    classificationLayer('Name','errorsal')];
%construimos el grafo de red inicial
grafo= layerGraph(capas);
%preparamos las otras ramas y las añadimos, de momento desconectadas
rama2 = [convolution2dLayer(ancho22,numproc22,'Padding','same','Name','conv_2_2')
reluLayer('Name','relu_2_2')];
grafo = addLayers(grafo,rama2);
%lo mismo el resto de las ramas
...
%las conectamos
grafo= connectLayers(grafo,'relu_1','conv_2_2');
grafo= connectLayers(grafo,'relu_2_2','union/in2');
%lo mismo las demás ramas
...
% vistazo de comprobación
plot(grafo)
%cargamos los datos
[Entaj,Salaj] = digitTrain4DArrayData;
[Entpru,Salpru] = digitTest4DArrayData;
%configuramos ajuste  y lo hacemos
opaj = trainingOptions('sgdm', ...
    'MaxEpochs',100, ...
    'Shuffle','every-epoch', ...
    'ValidationData',{Entpru,Salpru}, ...
    'ValidationFrequency',30, ...
    'Verbose',false, ...
    'Plots','training-progress');
red = trainNetwork(Entaj,Salaj,grafo,opaj);
%la probamos
Salred = classify(red,Entpru);
precis = mean(Salred == Salpru)
  1. Prueba a añadir capas de normalización tras cada una de las convolutivas
  2. También puedes cambiar el algoritmo de ajuste
  3. Prueba con más o menos procesadores y anchos de convolución
  4. Pon más o menos ramas
  5. Prueba más capas; en las ramas y/o en el modelo general
  6. Haz ramificaciones en varios niveles