Main Content

trainNetwork

Entrenar redes neuronales de deep learning

Descripción

Para tareas de clasificación y regresión, puede entrenar varios tipos de redes neuronales utilizando la función trainNetwork.

Por ejemplo, puede entrenar:

  • una red neuronal convolucional (ConvNet, CNN) para datos de imágenes

  • una red neuronal recurrente (RNN) como una memoria de corto-largo plazo (LSTM) o una unidad recurrente cerrada (GRU) para datos de secuencia y series de tiempo

  • una red de perceptrón multicapa (MLP) para datos de características numéricas

Puede entrenar tanto en una CPU como en una GPU. Para la clasificación y la regresión de imágenes, puede entrenar una sola red en paralelo utilizando varias GPU o un grupo paralelo local o remoto. Para entrenar una red en una GPU o en paralelo, es necesario utilizar Parallel Computing Toolbox™. Para utilizar una GPU para deep learning, debe también disponer de un dispositivo GPU compatible. Para obtener información sobre los dispositivos compatibles, consulte GPU Computing Requirements (Parallel Computing Toolbox). Para especificar opciones de entrenamiento, incluidas opciones para el entorno de ejecución, utilice la función trainingOptions.

Cuando entrena una red neuronal, puede especificar los predictores y las respuestas como una sola entrada o en dos entradas independientes.

ejemplo

net = trainNetwork(images,layers,options) entrena la red neuronal especificada por layers para tareas de clasificación y regresión de imágenes utilizando las imágenes y respuestas especificadas por images y las opciones de entrenamiento definidas por options.

ejemplo

net = trainNetwork(images,responses,layers,options) entrena utilizando las imágenes especificadas por images y las respuestas especificadas por responses.

net = trainNetwork(sequences,layers,options) entrena una red neuronal para tareas de clasificación y regresión de secuencia y series de tiempo (por ejemplo, una red de LSTM o GRU) utilizando las secuencias y respuestas especificadas por sequences.

ejemplo

net = trainNetwork(sequences,responses,layers,options) entrena utilizando las secuencias especificadas por sequences y las respuestas especificadas por responses.

ejemplo

net = trainNetwork(features,layers,options) entrena una red neuronal para tareas de clasificación y de regresión de características (por ejemplo, una red de perceptrón multicapa [MLP]) utilizando los datos de características y las respuestas especificados por features.

net = trainNetwork(features,responses,layers,options) entrena utilizando los datos de características especificados por features y las respuestas especificadas por responses.

net = trainNetwork(mixed,layers,options) entrena una red neuronal con varias entradas con tipos de datos mezclados utilizando los datos y las respuestas especificados por mixed.

[net,info] = trainNetwork(___) también devuelve información sobre el entrenamiento utilizando cualquiera de las sintaxis anteriores.

Ejemplos

contraer todo

Cargue los datos como un objeto ImageDatastore.

digitDatasetPath = fullfile(matlabroot,'toolbox','nnet', ...
    'nndemos','nndatasets','DigitDataset');
imds = imageDatastore(digitDatasetPath, ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');

El almacén de datos contiene 10.000 imágenes sintéticas con dígitos del 0 al 9. Las imágenes se generan aplicando transformaciones al azar a imágenes de dígitos creadas con diferentes fuentes. Cada imagen de dígito tiene 28 por 28 píxeles. El almacén de datos contiene la misma cantidad de imágenes por categoría.

Muestre algunas de las imágenes del almacén de datos.

figure
numImages = 10000;
perm = randperm(numImages,20);
for i = 1:20
    subplot(4,5,i);
    imshow(imds.Files{perm(i)});
    drawnow;
end

Figure contains 20 axes objects. Axes object 1 contains an object of type image. Axes object 2 contains an object of type image. Axes object 3 contains an object of type image. Axes object 4 contains an object of type image. Axes object 5 contains an object of type image. Axes object 6 contains an object of type image. Axes object 7 contains an object of type image. Axes object 8 contains an object of type image. Axes object 9 contains an object of type image. Axes object 10 contains an object of type image. Axes object 11 contains an object of type image. Axes object 12 contains an object of type image. Axes object 13 contains an object of type image. Axes object 14 contains an object of type image. Axes object 15 contains an object of type image. Axes object 16 contains an object of type image. Axes object 17 contains an object of type image. Axes object 18 contains an object of type image. Axes object 19 contains an object of type image. Axes object 20 contains an object of type image.

Divida el almacén de datos de forma que cada categoría del conjunto de entrenamiento contenga 750 imágenes y el conjunto de prueba contenga el resto de las imágenes de cada etiqueta.

numTrainingFiles = 750;
[imdsTrain,imdsTest] = splitEachLabel(imds,numTrainingFiles,'randomize');

splitEachLabel divide los archivos de imagen de digitData en dos nuevos almacenes de datos, imdsTrain y imdsTest.

Defina la arquitectura de la red neuronal convolucional.

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)
    reluLayer
    maxPooling2dLayer(2,'Stride',2)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

Establezca la configuración predeterminada de las opciones del gradiente descendente estocástico con momento. Establezca el número máximo de épocas en 20 y comience el entrenamiento con una tasa de aprendizaje inicial de 0,0001.

options = trainingOptions('sgdm', ...
    'MaxEpochs',20,...
    'InitialLearnRate',1e-4, ...
    'Verbose',false, ...
    'Plots','training-progress');

Entrene la red.

net = trainNetwork(imdsTrain,layers,options);

{"String":"Figure Training Progress (24-Jul-2022 21:29:19) contains 2 axes objects and another object of type uigridlayout. Axes object 1 contains 6 objects of type patch, text, line. Axes object 2 contains 6 objects of type patch, text, line.","Tex":[],"LaTex":[]}

Ejecute la red entrenada en el conjunto de pruebas, que no se ha utilizado para entrenar la red, y prediga las etiquetas de imagen (dígitos).

YPred = classify(net,imdsTest);
YTest = imdsTest.Labels;

Calcule la precisión. La precisión es la relación entre el número de etiquetas verdaderas de los datos de prueba que coinciden con las clasificaciones de classify y el número de imágenes de los datos de prueba.

accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9408

Entrene una red neuronal convolucional con datos de imágenes aumentadas. El aumento de datos ayuda a evitar que la red se sobreajuste y memorice los detalles exactos de las imágenes de entrenamiento.

Cargue los datos de muestra, que están formados por imágenes sintéticas de dígitos manuscritos.

[XTrain,YTrain] = digitTrain4DArrayData;

digitTrain4DArrayData carga el conjunto de entrenamiento de dígitos como datos de un arreglo 4D. XTrain es un arreglo de 28 por 28 por 1 por 5000, donde:

  • 28 es la altura y la anchura de las imágenes.

  • 1 es el número de canales.

  • 5000 es el número de imágenes sintéticas de dígitos manuscritos.

YTrain es un vector categórico que contiene las etiquetas para cada observación.

Reserve 1000 de las imágenes para la validación de la red.

idx = randperm(size(XTrain,4),1000);
XValidation = XTrain(:,:,:,idx);
XTrain(:,:,:,idx) = [];
YValidation = YTrain(idx);
YTrain(idx) = [];

Cree un objeto imageDataAugmenter que especifique las opciones de preprocesamiento para el aumento de imágenes, como el cambio de tamaño, la rotación, la traslación y la reflexión. Traslade aleatoriamente las imágenes hasta tres píxeles horizontal y verticalmente, y rote las imágenes con un ángulo de hasta 20 grados.

imageAugmenter = imageDataAugmenter( ...
    'RandRotation',[-20,20], ...
    'RandXTranslation',[-3 3], ...
    'RandYTranslation',[-3 3])
imageAugmenter = 
  imageDataAugmenter with properties:

           FillValue: 0
     RandXReflection: 0
     RandYReflection: 0
        RandRotation: [-20 20]
           RandScale: [1 1]
          RandXScale: [1 1]
          RandYScale: [1 1]
          RandXShear: [0 0]
          RandYShear: [0 0]
    RandXTranslation: [-3 3]
    RandYTranslation: [-3 3]

Cree un objeto augmentedImageDatastore para utilizarlo durante el entrenamiento de la red y especifique el tamaño de salida de la imagen. Durante el entrenamiento, el almacén de datos lleva a cabo el aumento de imágenes y cambia su tamaño. El almacén de datos aumenta las imágenes sin guardar ninguna en la memoria. trainNetwork actualiza los parámetros de la red y descarta las imágenes aumentadas.

imageSize = [28 28 1];
augimds = augmentedImageDatastore(imageSize,XTrain,YTrain,'DataAugmentation',imageAugmenter);

Especifique la arquitectura de la red neuronal convolucional.

layers = [
    imageInputLayer(imageSize)
    
    convolution2dLayer(3,8,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,16,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,32,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

Especifique las opciones de entrenamiento para el gradiente descendente estocástico con momento.

opts = trainingOptions('sgdm', ...
    'MaxEpochs',15, ...
    'Shuffle','every-epoch', ...
    'Plots','training-progress', ...
    'Verbose',false, ...
    'ValidationData',{XValidation,YValidation});

Entrene la red. Puesto que las imágenes de validación no son aumentadas, la precisión de validación es superior a la precisión de entrenamiento.

net = trainNetwork(augimds,layers,opts);

Cargue los datos de muestra, que están formados por imágenes sintéticas de dígitos manuscritos. La tercera salida contiene los ángulos correspondientes en grados en los que se ha rotado cada imagen.

Cargue las imágenes de entrenamiento como arreglos 4D mediante digitTrain4DArrayData. La salida XTrain es un arreglo de 28 por 28 por 1 por 5000, donde:

  • 28 es la altura y la anchura de las imágenes.

  • 1 es el número de canales.

  • 5000 es el número de imágenes sintéticas de dígitos manuscritos.

YTrain contiene los ángulos de rotación en grados.

[XTrain,~,YTrain] = digitTrain4DArrayData;

Muestre 20 imágenes aleatorias de entrenamiento mediante imshow.

figure
numTrainImages = numel(YTrain);
idx = randperm(numTrainImages,20);
for i = 1:numel(idx)
    subplot(4,5,i)    
    imshow(XTrain(:,:,:,idx(i)))
    drawnow;
end

Figure contains 20 axes objects. Axes object 1 contains an object of type image. Axes object 2 contains an object of type image. Axes object 3 contains an object of type image. Axes object 4 contains an object of type image. Axes object 5 contains an object of type image. Axes object 6 contains an object of type image. Axes object 7 contains an object of type image. Axes object 8 contains an object of type image. Axes object 9 contains an object of type image. Axes object 10 contains an object of type image. Axes object 11 contains an object of type image. Axes object 12 contains an object of type image. Axes object 13 contains an object of type image. Axes object 14 contains an object of type image. Axes object 15 contains an object of type image. Axes object 16 contains an object of type image. Axes object 17 contains an object of type image. Axes object 18 contains an object of type image. Axes object 19 contains an object of type image. Axes object 20 contains an object of type image.

Especifique la arquitectura de la red neuronal convolucional. Para problemas de regresión, incluya una capa de regresión al final de la red.

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(12,25)
    reluLayer
    fullyConnectedLayer(1)
    regressionLayer];

Especifique las opciones de entrenamiento de la red. Establezca la tasa de aprendizaje inicial en 0.001.

options = trainingOptions('sgdm', ...
    'InitialLearnRate',0.001, ...
    'Verbose',false, ...
    'Plots','training-progress');

Entrene la red.

net = trainNetwork(XTrain,YTrain,layers,options);

{"String":"Figure Training Progress (24-Jul-2022 21:32:58) contains 2 axes objects and another object of type uigridlayout. Axes object 1 contains 7 objects of type patch, text, line. Axes object 2 contains 7 objects of type patch, text, line.","Tex":[],"LaTex":[]}

Pruebe el rendimiento de la red evaluando la precisión de predicción de los datos de prueba. Utilice predict para predecir los ángulos de rotación de las imágenes de validación.

[XTest,~,YTest] = digitTest4DArrayData;
YPred = predict(net,XTest);

Evalúe el rendimiento del modelo calculando el error cuadrático medio raíz (RMSE) del ángulo de rotación predicho y del real.

rmse = sqrt(mean((YTest - YPred).^2))
rmse = single
    6.0355

Entrene una red de LSTM de deep learning para la clasificación secuencia a etiqueta.

Cargue el conjunto de datos de las vocales japonesas tal y como se describe en [1] y [2]. XTrain es un arreglo de celdas que contiene 270 secuencias de diferentes longitudes con 12 características que se corresponden con coeficientes cepstrales LPC. Y es un vector categórico de las etiquetas 1,2,...,9. Las entradas de XTrain son matrices con 12 filas (una fila por característica) y un número variable de columnas (una columna por unidad de tiempo).

[XTrain,YTrain] = japaneseVowelsTrainData;

Visualice la primera serie de tiempo en una gráfica. Cada línea se corresponde con una característica.

figure
plot(XTrain{1}')
title("Training Observation 1")
numFeatures = size(XTrain{1},1);
legend("Feature " + string(1:numFeatures),'Location','northeastoutside')

Figure contains an axes object. The axes object with title Training Observation 1 contains 12 objects of type line. These objects represent Feature 1, Feature 2, Feature 3, Feature 4, Feature 5, Feature 6, Feature 7, Feature 8, Feature 9, Feature 10, Feature 11, Feature 12.

Defina la arquitectura de la red de LSTM. Especifique el tamaño de la entrada como 12 (el número de características de los datos de entrada). Especifique una capa de LSTM con 100 unidades ocultas y que genere el último elemento de la secuencia. Por último, especifique nueve clases incluyendo una capa totalmente conectada de tamaño 9, seguida de una capa softmax y una capa de clasificación.

inputSize = 12;
numHiddenUnits = 100;
numClasses = 9;

layers = [ ...
    sequenceInputLayer(inputSize)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer]
layers = 
  5x1 Layer array with layers:

     1   ''   Sequence Input          Sequence input with 12 dimensions
     2   ''   LSTM                    LSTM with 100 hidden units
     3   ''   Fully Connected         9 fully connected layer
     4   ''   Softmax                 softmax
     5   ''   Classification Output   crossentropyex

Especifique las opciones de entrenamiento. Especifique el solver como 'adam' y 'GradientThreshold' como 1. Establezca el tamaño del minilote en 27 y el número máximo de épocas en 70.

Dado que los minilotes son pequeños y tienen secuencias cortas, la CPU es más adecuada para el entrenamiento. Establezca 'ExecutionEnvironment' en 'cpu'. Para realizar un entrenamiento en una GPU, si está disponible, establezca 'ExecutionEnvironment' en 'auto' (el valor por defecto).

maxEpochs = 70;
miniBatchSize = 27;

options = trainingOptions('adam', ...
    'ExecutionEnvironment','cpu', ...
    'MaxEpochs',maxEpochs, ...
    'MiniBatchSize',miniBatchSize, ...
    'GradientThreshold',1, ...
    'Verbose',false, ...
    'Plots','training-progress');

Entrene la red de LSTM con las opciones de entrenamiento especificadas.

net = trainNetwork(XTrain,YTrain,layers,options);

{"String":"Figure Training Progress (24-Jul-2022 21:31:01) contains 2 axes objects and another object of type uigridlayout. Axes object 1 contains 11 objects of type patch, text, line. Axes object 2 contains 11 objects of type patch, text, line.","Tex":[],"LaTex":[]}

Cargue el conjunto de prueba y clasifique las secuencias por hablantes.

[XTest,YTest] = japaneseVowelsTestData;

Clasifique los datos de prueba. Especifique el mismo tamaño de minilote utilizado para el entrenamiento.

YPred = classify(net,XTest,'MiniBatchSize',miniBatchSize);

Calcule la precisión de clasificación de las predicciones.

acc = sum(YPred == YTest)./numel(YTest)
acc = 0.9459

Si tiene un conjunto de datos de características numéricas (por ejemplo, una colección de datos numéricos sin dimensiones espaciales ni temporales), puede entrenar una red de deep learning utilizando una capa de entrada de características.

Lea los datos de la caja de engranajes del archivo CSV "transmissionCasingData.csv".

filename = "transmissionCasingData.csv";
tbl = readtable(filename,'TextType','String');

Convierta las etiquetas para la predicción en categóricas utilizando la función convertvars.

labelName = "GearToothCondition";
tbl = convertvars(tbl,labelName,'categorical');

Para entrenar una red utilizando características categóricas, primero debe convertir las características categóricas en numéricas. Primero, convierta los predictores categóricos en numéricos con la función convertvars especificando un arreglo de cadena que contenga los nombres de todas las variables de entrada categórica. En este conjunto de datos, hay dos características categóricas con los nombres "SensorCondition" y "ShaftCondition".

categoricalInputNames = ["SensorCondition" "ShaftCondition"];
tbl = convertvars(tbl,categoricalInputNames,'categorical');

Forme un lazo con las variables de entrada categórica. Para cada variable:

  • Convierta los valores categóricos en vectores codificados one-hot usando la función onehotencode.

  • Añada los vectores one-hot a la tabla utilizando la función addvars. Especifique que los vectores se inserten después de la columna que contiene los datos categóricos correspondientes.

  • Elimine la columna correspondiente que contiene los datos categóricos.

for i = 1:numel(categoricalInputNames)
    name = categoricalInputNames(i);
    oh = onehotencode(tbl(:,name));
    tbl = addvars(tbl,oh,'After',name);
    tbl(:,name) = [];
end

Divida los vectores en columnas independientes utilizando la función splitvars.

tbl = splitvars(tbl);

Visualice las primeras filas de la tabla. Observe que los predictores categóricos se han dividido en varias columnas con los valores categóricos como los nombres de las variables.

head(tbl)
    SigMean     SigMedian    SigRMS    SigVar     SigPeak    SigPeak2Peak    SigSkewness    SigKurtosis    SigCrestFactor    SigMAD     SigRangeCumSum    SigCorrDimension    SigApproxEntropy    SigLyapExponent    PeakFreq    HighFreqPower    EnvPower    PeakSpecKurtosis    No Sensor Drift    Sensor Drift    No Shaft Wear    Shaft Wear    GearToothCondition
    ________    _________    ______    _______    _______    ____________    ___________    ___________    ______________    _______    ______________    ________________    ________________    _______________    ________    _____________    ________    ________________    _______________    ____________    _____________    __________    __________________

    -0.94876     -0.9722     1.3726    0.98387    0.81571       3.6314        -0.041525       2.2666           2.0514         0.8081        28562              1.1429             0.031581            79.931            0          6.75e-06       3.23e-07         162.13                0                1                1              0           No Tooth Fault  
    -0.97537    -0.98958     1.3937    0.99105    0.81571       3.6314        -0.023777       2.2598           2.0203        0.81017        29418              1.1362             0.037835            70.325            0          5.08e-08       9.16e-08         226.12                0                1                1              0           No Tooth Fault  
      1.0502      1.0267     1.4449    0.98491     2.8157       3.6314         -0.04162       2.2658           1.9487        0.80853        31710              1.1479             0.031565            125.19            0          6.74e-06       2.85e-07         162.13                0                1                0              1           No Tooth Fault  
      1.0227      1.0045     1.4288    0.99553     2.8157       3.6314        -0.016356       2.2483           1.9707        0.81324        30984              1.1472             0.032088             112.5            0          4.99e-06        2.4e-07         162.13                0                1                0              1           No Tooth Fault  
      1.0123      1.0024     1.4202    0.99233     2.8157       3.6314        -0.014701       2.2542           1.9826        0.81156        30661              1.1469              0.03287            108.86            0          3.62e-06       2.28e-07         230.39                0                1                0              1           No Tooth Fault  
      1.0275      1.0102     1.4338     1.0001     2.8157       3.6314         -0.02659       2.2439           1.9638        0.81589        31102              1.0985             0.033427            64.576            0          2.55e-06       1.65e-07         230.39                0                1                0              1           No Tooth Fault  
      1.0464      1.0275     1.4477     1.0011     2.8157       3.6314        -0.042849       2.2455           1.9449        0.81595        31665              1.1417             0.034159            98.838            0          1.73e-06       1.55e-07         230.39                0                1                0              1           No Tooth Fault  
      1.0459      1.0257     1.4402    0.98047     2.8157       3.6314        -0.035405       2.2757            1.955        0.80583        31554              1.1345               0.0353            44.223            0          1.11e-06       1.39e-07         230.39                0                1                0              1           No Tooth Fault  

Visualice los nombres de las clases del conjunto de datos.

classNames = categories(tbl{:,labelName})
classNames = 2x1 cell
    {'No Tooth Fault'}
    {'Tooth Fault'   }

A continuación, divida el conjunto de datos en particiones de entrenamiento y de prueba. Reserve el 15% de los datos para las pruebas.

Determine el número de observaciones para cada partición.

numObservations = size(tbl,1);
numObservationsTrain = floor(0.85*numObservations);
numObservationsTest = numObservations - numObservationsTrain;

Cree un arreglo de índices aleatorios que se corresponda con las observaciones y divídalo utilizando los tamaños de partición.

idx = randperm(numObservations);
idxTrain = idx(1:numObservationsTrain);
idxTest = idx(numObservationsTrain+1:end);

Divida la tabla de datos en particiones de entrenamiento y de prueba utilizando los índices.

tblTrain = tbl(idxTrain,:);
tblTest = tbl(idxTest,:);

Defina una red con una capa de entrada de características y especifique el número de características. Configure también la capa de entrada para normalizar los datos utilizando la normalización de puntuación Z.

numFeatures = size(tbl,2) - 1;
numClasses = numel(classNames);
 
layers = [
    featureInputLayer(numFeatures,'Normalization', 'zscore')
    fullyConnectedLayer(50)
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

Especifique las opciones de entrenamiento.

miniBatchSize = 16;

options = trainingOptions('adam', ...
    'MiniBatchSize',miniBatchSize, ...
    'Shuffle','every-epoch', ...
    'Plots','training-progress', ...
    'Verbose',false);

Entrene la red con la arquitectura definida por layers, los datos de entrenamiento y las opciones de entrenamiento.

net = trainNetwork(tblTrain,layers,options);

{"String":"Figure Training Progress (24-Jul-2022 21:29:17) contains 2 axes objects and another object of type uigridlayout. Axes object 1 contains 7 objects of type patch, text, line. Axes object 2 contains 7 objects of type patch, text, line.","Tex":[],"LaTex":[]}

Prediga las etiquetas de los datos de prueba con la red entrenada y calcule la precisión. La precisión es la proporción de etiquetas que la red predice correctamente.

YPred = classify(net,tblTest,'MiniBatchSize',miniBatchSize);
YTest = tblTest{:,labelName};

accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9688

Argumentos de entrada

contraer todo

Datos de imágenes, especificados como uno de los siguientes:

Tipo de datosDescripciónEjemplo de uso
Almacén de datosImageDatastoreAlmacén de datos de imágenes guardadas en disco.

Entrenar redes neuronales de clasificación de imágenes con imágenes guardadas en disco, donde las imágenes tienen el mismo tamaño.

Si las imágenes tienen diferentes tamaños, use un objeto AugmentedImageDatastore.

Los objetos ImageDatastore solo admiten tareas de clasificación de imágenes. Para utilizar almacenes de datos de imágenes para redes de regresión, cree un almacén de datos transformado o combinado que contenga las imágenes y las respuestas utilizando las funciones transform y combine, respectivamente.

AugmentedImageDatastoreAlmacén de datos que aplica transformaciones geométricas afines aleatorias, incluyendo cambio de tamaño, rotación, reflexión, estiramiento y traslación.

  • Entrenar redes neuronales de clasificación de imágenes con imágenes guardadas en disco, donde las imágenes tienen distintos tamaños.

  • Entrenar redes neuronales de clasificación de imágenes y generar nuevos datos utilizando aumentos.

TransformedDatastoreAlmacén de datos que transforma lotes de datos leídos de un almacén de datos subyacente mediante una función de transformación personalizada.

  • Entrenar redes neuronales de regresión de imágenes.

  • Entrenar redes con varias entradas.

  • Transformar almacenes de datos con salidas no compatibles con trainNetwork.

  • Aplicar transformaciones personalizadas a la salida del almacén de datos.

CombinedDatastoreAlmacén de datos que lee de dos o más almacenes de datos subyacentes.

  • Entrenar redes neuronales de regresión de imágenes.

  • Entrenar redes con varias entradas.

  • Combinar predictores y respuestas de diferentes fuentes de datos.

PixelLabelImageDatastore (Computer Vision Toolbox)Almacén de datos que aplica transformaciones geométricas afines idénticas a imágenes y etiquetas de píxeles correspondientes.Entrenar redes neuronales para la segmentación semántica.
RandomPatchExtractionDatastore (Image Processing Toolbox)Almacén de datos que extrae pares de zonas aleatorias de imágenes o imágenes de etiquetas de píxeles y aplica opcionalmente transformaciones geométricas afines aleatorias idénticas a los pares.Entrenar redes neuronales para la detección de objetos.
DenoisingImageDatastore (Image Processing Toolbox)Almacén de datos que aplica ruido gaussiano generado aleatoriamente.Entrenar redes neuronales para eliminar el ruido de una imagen.
Almacén de datos de minilotes personalizadoAlmacén de datos personalizado que devuelve minilotes de datos.

Entrenar redes neuronales usando datos en un formato no compatible con otros almacenes de datos.

Para obtener más detalles, consulte Develop Custom Mini-Batch Datastore.

Arreglo numéricoImágenes especificadas como arreglo numérico. Si especifica imágenes como arreglo numérico, también debe especificar el argumento responses.Entrenar redes neuronales usando datos que quepan en la memoria y no requieran procesamiento adicional, como un aumento.
TablaImágenes especificadas como tabla. Si especifica imágenes como tabla, también puede especificar qué columnas contienen las respuestas utilizando el argumento responses.Entrenar redes neuronales usando datos guardados en una tabla.

Para redes con varias entradas, el almacén de datos debe ser un objeto TransformedDatastore o CombinedDatastore.

Sugerencia

Para secuencias de imágenes, por ejemplo, datos de vídeo, use el argumento de entrada sequences.

Almacén de datos

Los almacenes de datos leen minilotes de imágenes y respuestas. Los almacenes de datos son más adecuados cuando tiene datos que no caben en la memoria o cuando quiera aplicar aumentos o transformaciones a los datos.

La siguiente lista enumera almacenes de datos que son directamente compatibles con trainNetwork para datos de imágenes.

Por ejemplo, puede crear un almacén de datos de imágenes utilizando la función imageDatastore y usar los nombres de las carpetas que contienen las imágenes como etiquetas estableciendo la opción 'LabelSource' en 'foldernames'. Como alternativa, puede especificar las etiquetas manualmente con la propiedad Labels del almacén de datos de imágenes.

Tenga en cuenta que los objetos ImageDatastore permiten leer lotes de archivos de imágenes JPG o PNG mediante precarga. Si utiliza una función personalizada para leer las imágenes, los objetos ImageDatastore no realizan la precarga.

Sugerencia

Use augmentedImageDatastore para preprocesar eficiente de las imágenes para deep learning, incluyendo el cambio de tamaño de las imágenes.

No use la opción readFcn de la función imageDatastore para preprocesar o cambiar el tamaño, ya que esta opción suele ser bastante más lenta.

Puede utilizar otros almacenes de datos integrados para entrenar redes de deep learning utilizando las funciones transform y combine. Estas funciones pueden convertir los datos leídos de almacenes de datos al formato requerido por trainNetwork.

Para redes con varias entradas, el almacén de datos debe ser un objeto TransformedDatastore o CombinedDatastore.

El formato requerido de la salida del almacén de datos depende de la arquitectura de red.

Arquitectura de redSalida del almacén de datosEjemplo de salida
Capa de entrada única

Tabla o arreglo de celdas con dos columnas.

La primera y la segunda columna especifican los predictores y la respuesta, respectivamente.

Los elementos de la tabla deben ser escalares, vectores fila o arreglos de celdas de 1 por 1 que contengan un arreglo numérico.

Los almacenes de datos de minilotes personalizados deben producir tablas como salida.

Tabla para red con una entrada y una salida:

data = read(ds)
data =

  4×2 table

        Predictors        Response
    __________________    ________

    {224×224×3 double}       2    
    {224×224×3 double}       7    
    {224×224×3 double}       9    
    {224×224×3 double}       9  

Arreglo de celdas para red con una entrada y una salida:

data = read(ds)
data =

  4×2 cell array

    {224×224×3 double}    {[2]}
    {224×224×3 double}    {[7]}
    {224×224×3 double}    {[9]}
    {224×224×3 double}    {[9]}

Capas de entrada múltiples

Arreglo de celdas con (numInputs + 1) columnas, donde numInputs es el número de entradas de red.

Las primeras numInputs columnas especifican los predictores de cada entrada y la última columna especifica las respuestas.

El orden de las entradas se indica mediante la propiedad InputNames de la gráfica de capas layers.

Arreglo de celdas para red con dos entradas y una salida.

data = read(ds)
data =

  4×3 cell array

    {224×224×3 double}    {128×128×3 double}    {[2]}
    {224×224×3 double}    {128×128×3 double}    {[2]}
    {224×224×3 double}    {128×128×3 double}    {[9]}
    {224×224×3 double}    {128×128×3 double}    {[9]}

El formato de los predictores depende del tipo de datos.

DatosFormato
Imágenes 2D

Arreglo numérico de h por w por c, donde h, w y c son la altura, la anchura y el número de canales de las imágenes, respectivamente.

Imágenes 3DArreglo numérico de h por w por d por c, donde h, w, d y c son la altura, la anchura, la profundidad y el número de canales de las imágenes, respectivamente.

Para predictores devueltos en tablas, los elementos deben contener un escalar numérico, un vector fila numérico o un arreglo de celdas de 1 por 1 con el arreglo numérico.

El formato de las respuestas depende del tipo de tarea.

TareaFormato de respuesta
Clasificación de imágenesEscalar categórico
Regresión de imágenes
  • Escalar numérico

  • Vector numérico

  • Arreglo numérico 3D que representa una imagen 2D

  • Arreglo numérico 4D que representa una imagen 3D

Para respuestas devueltas en tablas, los elementos deben ser un escalar categórico, un escalar numérico, un vector fila numérico o un arreglo de celdas de 1 por 1 con un arreglo numérico.

Para obtener más información, consulte Datastores for Deep Learning.

Arreglo numérico

Para datos que quepan en la memoria y no requieran procesamiento adicional, como aumento, puede especificar un conjunto de datos de imágenes como arreglo numérico. Si especifica imágenes como arreglo numérico, también debe especificar el argumento responses.

El tamaño y la forma del arreglo numérico dependen del tipo de datos de imágenes.

DatosFormato
Imágenes 2D

Arreglo numérico de h por w por c por N, en el que h, w y c son la altura, la anchura y el número de canales de las imágenes, respectivamente, y N es el número de imágenes.

Imágenes 3DArreglo numérico de h por w por d por c por N, en el que h, w, d y c son la altura, la anchura, la profundidad y el número de canales de las imágenes, respectivamente, y N es el número de imágenes.

Tabla

Como alternativa a los almacenes de datos o arreglos numéricos, también puede especificar imágenes y respuestas en una tabla. Si especifica imágenes como tabla, también puede especificar qué columnas contienen las respuestas utilizando el argumento responses.

Cuando se especifican imágenes y respuestas en una tabla, cada fila de la tabla corresponde a una observación.

Para entradas de imagen, los predictores deben estar en la primera columna de la tabla, especificados como una de las siguientes opciones:

  • Ruta de archivo absoluta o relativa a una imagen, especificada como vector de caracteres.

  • Arreglo de celdas de 1 por 1 que contiene un arreglo numérico de h por w por c que representa una imagen 2D, donde h, w y c corresponden a la altura, la anchura y el número de canales de la imagen, respectivamente.

El formato de las respuestas depende del tipo de tarea.

TareaFormato de respuesta
Clasificación de imágenesEscalar categórico
Regresión de imágenes
  • Escalar numérico

  • Dos o más columnas de valores escalares

  • Arreglo de celdas de 1 por 1 que contiene un arreglo numérico de h por w por c que representa una imagen 2D

  • Arreglo de celdas de 1 por 1 que contiene un arreglo numérico de h por w por d por c que representa una imagen 3D

En el caso de redes neuronales con entrada de imágenes, si no especifica responses, la función, de forma predeterminada, utilizará la primera columna tbl para los predictores y las columnas posteriores como respuestas.

Sugerencia

  • Si los predictores o las respuestas contienen valores NaN, estos se propagan a lo largo de la red durante el entrenamiento. En esos casos, normalmente el entrenamiento no converge.

  • Para las tareas de regresión, normalizar las respuestas suele ayudar a estabilizar y acelerar el entrenamiento de las redes neuronales para la regresión. Para obtener más información, consulte Entrenar una red neuronal convolucional para regresión.

  • Para introducir datos de valores complejos en una red, la opción SplitComplexInputs de la capa de entrada debe ser 1.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | table
Soporte de números complejos:

Secuencia o datos de series de tiempo, especificados como uno de los siguientes:

Tipo de datosDescripciónEjemplo de uso
Almacén de datosTransformedDatastoreAlmacén de datos que transforma lotes de datos leídos de un almacén de datos subyacente mediante una función de transformación personalizada.

  • Transformar almacenes de datos con salidas no compatibles con trainNetwork.

  • Aplicar transformaciones personalizadas a la salida del almacén de datos.

CombinedDatastoreAlmacén de datos que lee de dos o más almacenes de datos subyacentes.

Combinar predictores y respuestas de diferentes fuentes de datos.

Almacén de datos de minilotes personalizadoAlmacén de datos personalizado que devuelve minilotes de datos.

Entrenar redes neuronales usando datos en un formato no compatible con otros almacenes de datos.

Para obtener más detalles, consulte Develop Custom Mini-Batch Datastore.

Arreglo numérico o de celdasUna única secuencia especificada como arreglo numérico o un conjunto de datos de secuencias especificado como arreglo de celdas de arreglos numéricos. Si especifica secuencias como arreglo numérico o de celdas, también debe especificar el argumento responses.Entrenar redes neuronales usando datos que quepan en la memoria y no requieran procesamiento adicional, como transformaciones personalizadas.

Almacén de datos

Los almacenes de datos leen minilotes de secuencias y respuestas. Los almacenes de datos son más adecuados cuando tiene datos que no caben en la memoria o cuando quiera aplicar transformaciones a los datos.

La siguiente lista enumera almacenes de datos que son directamente compatibles con trainNetwork para datos secuenciales.

Puede utilizar otros almacenes de datos integrados para entrenar redes de deep learning utilizando las funciones transform y combine. Estas funciones pueden convertir los datos leídos de almacenes de datos al formato de tabla o arreglo de celdas requerido por trainNetwork. Por ejemplo, puede transformar y combinar datos leídos de arreglos en memoria y archivos CVS mediante objetos ArrayDatastore y TabularTextDatastore, respectivamente.

El almacén de datos debe devolver datos en una tabla o arreglo de celdas. Los almacenes de datos de minilotes personalizados deben producir tablas como salida.

Salida del almacén de datosEjemplo de salida
Tabla
data = read(ds)
data =

  4×2 table

        Predictors        Response
    __________________    ________

    {12×50 double}           2    
    {12×50 double}           7    
    {12×50 double}           9    
    {12×50 double}           9  
Arreglo de celdas
data = read(ds)
data =

  4×2 cell array

    {12×50 double}        {[2]}
    {12×50 double}        {[7]}
    {12×50 double}        {[9]}
    {12×50 double}        {[9]}

El formato de los predictores depende del tipo de datos.

DatosFormato de los predictores
Secuencia de vector

Matriz de c por s, donde c es el número de características de la secuencia y s es la longitud de la secuencia.

Secuencia de imágenes 1D

Arreglo de h por c por s, donde h y c corresponden a la altura y el número de canales de la imagen, respectivamente, y s es la longitud de la secuencia.

Cada secuencia del minilote debe tener la misma longitud de secuencia.

Secuencia de imágenes 2D

Arreglo de h por w por c por s, donde h, w y c corresponden a la altura, la anchura y el número de canales de la imagen, respectivamente, y s es la longitud de la secuencia.

Cada secuencia del minilote debe tener la misma longitud de secuencia.

Secuencia de imágenes 3D

Arreglo de h por w por d por c por s, donde h, w, d y c corresponden a la altura, la anchura, la profundidad y el número de canales de la imagen, respectivamente, y s es la longitud de la secuencia.

Cada secuencia del minilote debe tener la misma longitud de secuencia.

Para predictores devueltos en tablas, los elementos deben contener un escalar numérico, un vector fila numérico o un arreglo de celdas de 1 por 1 con un arreglo numérico.

El formato de las respuestas depende del tipo de tarea.

TareaFormato de las respuestas
Clasificación secuencia a etiquetaEscalar categórico
Regresión de secuencia a uno

Escalar

Regresión de secuencia a vector

Vector fila numérico

Clasificación secuencia a secuencia

  • Secuencia de 1 por s de etiquetas categóricas, donde s es la longitud de secuencia de la secuencia de predictor correspondiente.

  • Secuencia de h por w por s de etiquetas categóricas, donde h, w y s son la altura, la anchura y la longitud de secuencia de la secuencia de predictor correspondiente, respectivamente.

  • Secuencia de h por w por d por s de etiquetas categóricas, donde h, w, d y s son la altura, la anchura, la profundidad y la longitud de secuencia de la secuencia de predictor correspondiente, respectivamente.

Cada secuencia del minilote debe tener la misma longitud de secuencia.

Regresión secuencia a secuencia
  • Matriz de R por s, donde R es el número de respuestas y s es la longitud de secuencia de la secuencia de predictor correspondiente.

  • Secuencia de h por w por R por s de respuestas numéricas, donde R es el número de respuestas y h, w y s son la altura, la anchura y la longitud de secuencia de la secuencia de predictor correspondiente, respectivamente.

  • Secuencia de h por w por d por R por s de respuestas numéricas, donde R es el número de respuestas y h, w, d y s son la altura, la anchura, la profundidad y la longitud de secuencia de la secuencia de predictor correspondiente, respectivamente.

Cada secuencia del minilote debe tener la misma longitud de secuencia.

Para respuestas devueltas en tablas, los elementos deben ser un escalar categórico, un escalar numérico, un vector fila numérico o un arreglo de celdas de 1 por 1 con un arreglo numérico.

Para obtener más información, consulte Datastores for Deep Learning.

Arreglo numérico o de celdas

Para datos que quepan en la memoria y no requieran procesamiento adicional, como transformaciones personalizadas, puede especificar una única secuencia como arreglo numérico o un conjunto de datos de secuencias como un arreglo de celdas de arreglos numéricos. Si especifica secuencias como arreglo de celdas o numérico, también debe especificar el argumento responses.

Para entradas en forma de arreglo de celdas, el arreglo de celdas debe ser un arreglo de celdas de N por 1 de arreglos numéricos, donde N es el número de observaciones. El tamaño y la forma del arreglo numérico que representa una secuencia depende del tipo de datos secuenciales.

EntradaDescripción
Secuencias de vectorMatrices de c por s, donde c es el número de características de las secuencias y s es la longitud de la secuencia.
Secuencias de imágenes 1DArreglos de h por c por s, donde h y c corresponden a la altura y el número de canales de las imágenes, respectivamente, y s es la longitud de la secuencia.
Secuencias de imágenes 2DArreglos de h por w por c por s, donde h, w y c corresponden a la altura, la anchura y el número de canales de las imágenes, respectivamente, y s es la longitud de la secuencia.
Secuencias de imágenes 3DArreglos de h por w por d por c por s, donde h, w, d y c corresponden a la altura, la anchura, la profundidad y el número de canales de las imágenes 3D, respectivamente, y s es la longitud de la secuencia.

La función trainNetwork admite redes con al menos una capa de entrada de secuencias.

Sugerencia

  • Si los predictores o las respuestas contienen valores NaN, estos se propagan a lo largo de la red durante el entrenamiento. En esos casos, normalmente el entrenamiento no converge.

  • En el caso de las tareas de regresión, normalizar las respuestas suele ayudar a estabilizar y acelerar el entrenamiento. Para obtener más información, consulte Entrenar una red neuronal convolucional para regresión.

  • Para introducir datos de valores complejos en una red, la opción SplitComplexInputs de la capa de entrada debe ser 1.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | cell
Soporte de números complejos:

Datos de características, especificados como uno de los siguientes:

Tipo de datosDescripciónEjemplo de uso
Almacén de datosTransformedDatastoreAlmacén de datos que transforma lotes de datos leídos de un almacén de datos subyacente mediante una función de transformación personalizada.

  • Entrenar redes con varias entradas.

  • Transformar almacenes de datos con salidas no compatibles con trainNetwork.

  • Aplicar transformaciones personalizadas a la salida del almacén de datos.

CombinedDatastoreAlmacén de datos que lee de dos o más almacenes de datos subyacentes.

  • Entrenar redes con varias entradas.

  • Combinar predictores y respuestas de diferentes fuentes de datos.

Almacén de datos de minilotes personalizadoAlmacén de datos personalizado que devuelve minilotes de datos.

Entrenar redes neuronales usando datos en un formato no compatible con otros almacenes de datos.

Para obtener más detalles, consulte Develop Custom Mini-Batch Datastore.

TablaDatos de características especificados como una tabla. Si especifica características como tabla, también puede especificar qué columnas contienen las respuestas utilizando el argumento responses.Entrenar redes neuronales usando datos guardados en una tabla.
Arreglo numéricoDatos de características especificados como un arreglo numérico. Si especifica características como arreglo numérico, también debe especificar el argumento responses.Entrenar redes neuronales usando datos que quepan en la memoria y no requieran procesamiento adicional, como transformaciones personalizadas.

Almacén de datos

Los almacenes de datos leen minilotes de datos de características y respuestas. Los almacenes de datos son más adecuados cuando tiene datos que no caben en la memoria o cuando quiera aplicar transformaciones a los datos.

La siguiente lista enumera almacenes de datos que son directamente compatibles con trainNetwork para datos de características.

Puede utilizar otros almacenes de datos integrados para entrenar redes de deep learning utilizando las funciones transform y combine. Estas funciones pueden convertir los datos leídos de almacenes de datos al formato de tabla o arreglo de celdas requerido por trainNetwork. Para obtener más información, consulte Datastores for Deep Learning.

Para redes con varias entradas, el almacén de datos debe ser un objeto TransformedDatastore o CombinedDatastore.

El almacén de datos debe devolver datos en una tabla o arreglo de celdas. Los almacenes de datos de minilotes personalizados deben producir tablas como salida. El formato de la salida del almacén de datos depende de la arquitectura de red.

Arquitectura de redSalida del almacén de datosEjemplo de salida
Capa de entrada única

Tabla o arreglo de celdas con dos columnas.

La primera y la segunda columna especifican los predictores y la respuesta, respectivamente.

Los elementos de la tabla deben ser escalares, vectores fila o arreglos de celdas de 1 por 1 que contengan un arreglo numérico.

Los almacenes de datos de minilotes personalizados deben producir tablas como salida.

Tabla para red con una entrada y una salida:

data = read(ds)
data =

  4×2 table

        Predictors        Response
    __________________    ________

    {24×1 double}            2    
    {24×1 double}            7    
    {24×1 double}            9    
    {24×1 double}            9  

Arreglo de celdas para red con una entrada y una salida:

data = read(ds)
data =

  4×2 cell array

    {24×1 double}    {[2]}
    {24×1 double}    {[7]}
    {24×1 double}    {[9]}
    {24×1 double}    {[9]}

Capas de entrada múltiples

Arreglo de celdas con (numInputs + 1) columnas, donde numInputs es el número de entradas de red.

Las primeras numInputs columnas especifican los predictores de cada entrada y la última columna especifica las respuestas.

El orden de las entradas se indica mediante la propiedad InputNames de la gráfica de capas layers.

Arreglo de celdas para red con dos entradas y una salida:

data = read(ds)
data =

  4×3 cell array

    {24×1 double}    {28×1 double}    {[2]}
    {24×1 double}    {28×1 double}    {[2]}
    {24×1 double}    {28×1 double}    {[9]}
    {24×1 double}    {28×1 double}    {[9]}

Los predictores deben ser vectores columna de c por 1, donde c es el número de características.

El formato de las respuestas depende del tipo de tarea.

TareaFormato de las respuestas
ClasificaciónEscalar categórico
Regresión

  • Escalar

  • Vector numérico

Para obtener más información, consulte Datastores for Deep Learning.

Tabla

Para datos de características que quepan en la memoria y no requieran procesamiento adicional, como transformaciones personalizadas, puede especificar datos de características y respuestas como una tabla.

Cada fila de la tabla corresponde a una observación. El ajuste de predictores y respuestas en las columnas de la tabla depende del tipo de tarea.

TareaPredictoresRespuestas
Clasificación de características

Características especificadas en una o más columnas como escalares.

Si no especifica el argumento responses, los predictores deberán estar en las primeras columnas numFeatures de la tabla, donde numFeatures es el número de características de los datos de entrada.

Etiqueta categórica

Regresión de características

Una o más columnas de valores escalares

En el caso de redes de clasificación con entrada de características, si no especifica el argumento responses, la función, de forma predeterminada, utilizará las primeras columnas (numColumns - 1) de tbl para los predictores y la última columna para las etiquetas, donde numFeatures es el número de características de los datos de entrada.

En el caso de redes de regresión con entrada de características, si no especifica el argumento responseNames, la función, de forma predeterminada, utilizará las primeras columnas numFeatures para los predictores y las columnas posteriores para las respuestas, donde numFeatures es el número de características de los datos de entrada.

Arreglo numérico

Para datos de características que quepan en la memoria y no requieran procesamiento adicional, como transformaciones personalizadas, puede especificar datos de características como un arreglo numérico. Si especifica datos de características como arreglo numérico, también debe especificar el argumento responses.

El arreglo numérico debe ser un arreglo numérico de N por numFeatures, donde N es el número de observaciones y numFeatures es el número de características de los datos de entrada.

Sugerencia

  • Normalizar las respuestas suele ayudar a estabilizar y acelerar el entrenamiento de las redes neuronales para la regresión. Para obtener más información, consulte Entrenar una red neuronal convolucional para regresión.

  • Las respuestas no pueden contener valores NaN. Si los datos del predictor contienen valores NaN, estos se propagan a lo largo de la red. Sin embargo, en la mayoría de los casos, el entrenamiento no converge.

  • Para introducir datos de valores complejos en una red, la opción SplitComplexInputs de la capa de entrada debe ser 1.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | table
Soporte de números complejos:

Datos mezclados y respuestas, especificados como uno de los siguientes:

Tipo de datosDescripciónEjemplo de uso
TransformedDatastoreAlmacén de datos que transforma lotes de datos leídos de un almacén de datos subyacente mediante una función de transformación personalizada.

  • Entrenar redes con varias entradas.

  • Transformar salidas de almacenes de datos no compatibles con trainNetwork para que tengan el formato requerido.

  • Aplicar transformaciones personalizadas a la salida del almacén de datos.

CombinedDatastoreAlmacén de datos que lee de dos o más almacenes de datos subyacentes.

  • Entrenar redes con varias entradas.

  • Combinar predictores y respuestas de diferentes fuentes de datos.

Almacén de datos de minilotes personalizadoAlmacén de datos personalizado que devuelve minilotes de datos.

Entrenar redes neuronales usando datos en un formato no compatible con otros almacenes de datos.

Para obtener más detalles, consulte Develop Custom Mini-Batch Datastore.

Puede utilizar otros almacenes de datos integrados para entrenar redes de deep learning utilizando las funciones transform y combine. Estas funciones pueden convertir los datos leídos de almacenes de datos al formato de tabla o arreglo de celdas requerido por trainNetwork. Para obtener más información, consulte Datastores for Deep Learning.

El almacén de datos debe devolver datos en una tabla o arreglo de celdas. Los almacenes de datos de minilotes personalizados deben producir tablas como salida. El formato de la salida del almacén de datos depende de la arquitectura de red.

Salida del almacén de datosEjemplo de salida

Arreglo de celdas con (numInputs + 1) columnas, donde numInputs es el número de entradas de red.

Las primeras numInputs columnas especifican los predictores de cada entrada y la última columna especifica las respuestas.

El orden de las entradas se indica mediante la propiedad InputNames de la gráfica de capas layers.

data = read(ds)
data =

  4×3 cell array

    {24×1 double}    {28×1 double}    {[2]}
    {24×1 double}    {28×1 double}    {[2]}
    {24×1 double}    {28×1 double}    {[9]}
    {24×1 double}    {28×1 double}    {[9]}

Para entradas de predictor de imagen, secuencia y característica, el formato de los predictores debe coincidir con los formatos descritos en las descripciones de los argumentos images, sequences o features, respectivamente. Del mismo modo, el formato de las respuestas debe coincidir con los formatos descritos en las descripciones de los argumentos images, sequences o features que se corresponden con el tipo de tarea.

La función trainNetwork admite redes con al menos una capa de entrada de secuencias.

Para ver un ejemplo de cómo entrenar una red con varias entradas, consulte Train Network on Image and Feature Data.

Sugerencia

  • Para convertir un arreglo numérico a un almacén de datos, use ArrayDatastore.

  • Cuando combine capas en una red con tipos de datos mezclados, puede que tenga que volver a establecer el formato de los datos antes de pasarlos a una capa de combinación (como una capa de concatenación o una capa de suma). Para volver a establecer el formato de los datos, puede utilizar una capa aplanada para aplanar las dimensiones espaciales a la dimensión del canal, o crear un objeto FunctionLayer o una capa personalizada que vuelva a establecer el formato y cambie la forma.

Respuestas.

Cuando los datos de entrada son un arreglo numérico o un arreglo de celdas, especifique las respuestas como uno de los siguientes elementos.

  • vector categórico de etiquetas

  • arreglo numérico de respuestas numéricas

  • arreglo de celdas de secuencias categóricas o numéricas

Cuando los datos de entrada son una tabla, puede especificar opcionalmente qué columnas de la tabla contienen las respuestas como uno de los siguientes elementos:

  • vector de caracteres

  • arreglo de celdas de vectores de caracteres

  • arreglo de cadena

Cuando los datos de entrada son un arreglo numérico o un arreglo de celdas, el formato de las respuestas depende del tipo de tarea.

TareaFormato
ClasificaciónClasificación de imágenesVector categórico de etiquetas de N por 1, en el que N es el número de observaciones.
Clasificación de características
Clasificación secuencia a etiqueta
Clasificación secuencia a secuencia

Arreglo de celdas de N por 1 de secuencias categóricas de etiquetas, en el que N es el número de observaciones. Cada secuencia debe tener el mismo número de unidades de tiempo que la secuencia de predictor correspondiente.

Para tareas de clasificación secuencia a secuencia con una observación, sequences también puede ser un vector. En ese caso, responses debe ser un vector fila categórico de etiquetas.

RegresiónRegresión de imágenes 2D
  • Matriz de N por R, en la que N es el número de observaciones y R es el número de respuestas.

  • Arreglo numérico de h por w por c por N, en el que h, w y c son la altura, la anchura y el número de canales de las imágenes, respectivamente, y N es el número de imágenes.

Regresión de imágenes 3D
  • Matriz de N por R, en la que N es el número de observaciones y R es el número de respuestas.

  • Arreglo numérico de h por w por d por c por N, en el que h, w, d y c son la altura, la anchura, la profundidad y el número de canales de las imágenes, respectivamente, y N es el número de imágenes.

Regresión de características

Matriz de N por R, en la que N es el número de observaciones y R es el número de respuestas.

Regresión de secuencia a unoMatriz de N por R, en la que N es el número de secuencias y R es el número de respuestas.
Regresión secuencia a secuencia

Arreglo de celdas de N por 1 de secuencias numéricas, donde N es el número de secuencias, con secuencias dadas por uno de los siguientes elementos:

  • Matriz de R por s, donde R es el número de respuestas y s es la longitud de secuencia de la secuencia de predictor correspondiente.

  • Arreglo de h por w por R por s, donde h y w son la altura y la anchura de la salida, respectivamente, R es el número de respuestas y s es la longitud de secuencia de la secuencia de predictor correspondiente.

  • Arreglo de h por w por d por R por s, donde h, w y d son la altura, la anchura y la profundidad de la salida, respectivamente, R es el número de respuestas y s es la longitud de secuencia de la secuencia de predictor correspondiente.

En el caso de tareas de regresión secuencia a secuencia con una observación, sequences puede ser un arreglo numérico. En ese caso, responses debe ser un arreglo numérico de respuestas.

Sugerencia

Normalizar las respuestas suele ayudar a estabilizar y acelerar el entrenamiento de las redes neuronales para la regresión. Para obtener más información, consulte Entrenar una red neuronal convolucional para regresión.

Sugerencia

Las respuestas no pueden contener valores NaN. Si los datos del predictor contienen valores NaN, estos se propagan a lo largo de la red. Sin embargo, en la mayoría de los casos, el entrenamiento no converge.

Capas de red, especificadas como arreglo Layer u objeto LayerGraph.

Para crear una red con todas las capas conectadas secuencialmente, puede utilizar un arreglo Layer como argumento de entrada. En ese caso, la red devuelta es un objeto SeriesNetwork.

Una red gráfica acíclica dirigida (DAG) presenta una estructura compleja en la que las capas tienen varias entradas y salidas. Para crear una red DAG, especifique la arquitectura de red como objeto LayerGraph y utilice esa gráfica de capas como argumento de entrada para trainNetwork.

La función trainNetwork admite redes con al menos una capa de entrada de secuencias.

Para ver una lista de capas integradas, consulte List of Deep Learning Layers.

Opciones de entrenamiento, especificadas como objeto TrainingOptionsSGDM, TrainingOptionsRMSProp o TrainingOptionsADAM devuelto por la función trainingOptions.

Argumentos de salida

contraer todo

Red entrenada, devuelta como objeto SeriesNetwork o DAGNetwork.

Si entrena la red con un arreglo Layer, net es un objeto SeriesNetwork. Si entrena la red con un objeto LayerGraph, net es un objeto DAGNetwork.

Información de entrenamiento, devuelta como estructura, donde cada campo es un escalar o un vector numérico con un elemento por iteración de entrenamiento.

Para tareas de clasificación, info contiene los siguientes campos:

  • TrainingLoss: valores de función de pérdida

  • TrainingAccuracy: precisiones de entrenamiento

  • ValidationLoss: valores de función de pérdida

  • ValidationAccuracy: precisiones de validación

  • BaseLearnRate: tasas de aprendizaje

  • FinalValidationLoss: pérdida de validación de la red devuelta

  • FinalValidationAccuracy: pérdida de validación de la red devuelta

  • OutputNetworkIteration: número de iteración de la red devuelta

En el caso de tareas de regresión, info contiene los siguientes campos:

  • TrainingLoss: valores de función de pérdida

  • TrainingRMSE: valores RMSE de entrenamiento

  • ValidationLoss: valores de función de pérdida

  • ValidationRMSE: valores RMSE de validación

  • BaseLearnRate: tasas de aprendizaje

  • FinalValidationLoss: pérdida de validación de la red devuelta

  • FinalValidationRMSE: RMSE de validación de la red devuelta

  • OutputNetworkIteration: número de iteración de la red devuelta

La estructura solo contiene los campos ValidationLoss, ValidationAccuracy, ValidationRMSE, FinalValidationLoss, FinalValidationAccuracy y FinalValidationRMSE cuando options especifica datos de validación. La opción de entrenamiento ValidationFrequency determina en qué iteraciones calcula el software las métricas de validación. Las métricas de validación finales son un escalar. Los otros campos de la estructura son vectores fila, donde cada elemento se corresponde con una iteración de entrenamiento. En el caso de iteraciones cuando el software no calcula las métricas de validación, los valores correspondientes en la estructura son valores NaN.

En el caso de redes que contienen capas de normalización de lotes, si la opción de entrenamiento BatchNormalizationStatistics es 'population', las métricas de validación finales suelen ser diferentes de las métricas de validación evaluadas durante el entrenamiento. Esto se debe a que las capas de normalización de lotes en la red final llevan a cabo operaciones distintas de las que se realizan durante el entrenamiento. Para obtener más información, consulte batchNormalizationLayer.

Más acerca de

contraer todo

Guardar redes de puntos de control y retomar el entrenamiento

Deep Learning Toolbox™ permite guardar redes como archivos .mat durante el entrenamiento. Este guardado periódico resulta especialmente útil cuando tiene una red o un conjunto de datos grandes y el entrenamiento lleva mucho tiempo. Si el entrenamiento se ve interrumpido por alguna razón, podrá retomarlo a partir de la última red de puntos de control guardada. Si desea que trainNetwork guarde redes de puntos de control, debe especificar el nombre de la ruta utilizando la opción CheckpointPath de trainingOptions. Si la ruta que especifica no existe, trainingOptions devuelve un error.

trainNetwork asigna automáticamente nombres únicos a los archivos de redes de puntos de control. En el nombre de ejemplo, net_checkpoint__351__2018_04_12__18_09_52.mat, 351 es el número de iteración, 2018_04_12 es la fecha y 18_09_52 es la hora a la que trainNetwork guarda la red. Puede cargar un archivo de redes de puntos de control haciendo doble clic sobre él o utilizando el comando de carga en la línea de comandos. Por ejemplo:

load net_checkpoint__351__2018_04_12__18_09_52.mat
Puede retomar el entrenamiento utilizando las capas de la red como argumento de entrada para trainNetwork. Por ejemplo:

trainNetwork(XTrain,TTrain,net.Layers,options)
Debe especificar manualmente las opciones de entrenamiento y los datos de entrada, ya que la red de puntos de control no contiene esta información. Para ver un ejemplo, consulte Resume Training from Checkpoint Network.

Aritmética de coma flotante

Cuando entrena una red mediante la función trainNetwork o cuando usa las funciones de predicción o validación con objetos DAGNetwork y SeriesNetwork, el software realiza estos cálculos utilizando aritmética de precisión simple y de coma flotante. Las funciones para entrenamiento, predicción y validación incluyen trainNetwork, predict, classify y activations. El software utiliza aritmética de precisión simple cuando entrena redes usando tanto las CPU como las GPU.

Referencias

[1] Kudo, M., J. Toyama, and M. Shimbo. "Multidimensional Curve Classification Using Passing-Through Regions." Pattern Recognition Letters. Vol. 20, No. 11–13, pp. 1103–1111.

[2] Kudo, M., J. Toyama, and M. Shimbo. Japanese Vowels Data Set. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

Capacidades ampliadas

Historial de versiones

Introducido en R2016a

expandir todo