alexnet
Red neuronal convolucional AlexNet

Descripción
AlexNet es una red neuronal convolucional con 8 capas de profundidad. Puede cargar una versión preentrenada de la red entrenada en más de un millón de imágenes desde la base de datos [1] de ImageNet. La red preentrenada puede clasificar imágenes en 1000 categorías de objetos (por ejemplo, teclado, ratón, lápiz y muchos animales). Como resultado, la red ha aprendido representaciones ricas en características para una amplia gama de imágenes. El tamaño de la entrada de imagen de la red es de 227 por 227. Para ver más redes preentrenadas en MATLAB®, consulte Redes neuronales profundas preentrenadas.
Puede utilizar classify
para clasificar nuevas imágenes mediante la red AlexNet. Siga los pasos que se muestran en Clasificar una imagen con GoogLeNet y reemplace GoogLeNet por AlexNet.
Para ver una introducción práctica gratuita a métodos de deep learning prácticos, consulte Deep Learning Onramp.
devuelve una red AlexNet entrenada con el conjunto de datos de ImageNet.net
= alexnet
Esta función requiere el paquete de soporte Deep Learning Toolbox™ Model for AlexNet Network. Si no ha instalado el paquete de soporte, la función proporciona un enlace de descarga. Como alternativa, consulte Deep Learning Toolbox Model for AlexNet Network.
Para ver más redes preentrenadas en MATLAB, consulte Redes neuronales profundas preentrenadas.
devuelve una red AlexNet entrenada con el conjunto de datos de ImageNet. Esta sintaxis es equivalente a net
= alexnet('Weights','imagenet'
)net = alexnet
.
devuelve la arquitectura de red AlexNet sin entrenar. El modelo sin entrenar no requiere ningún paquete de soporte.layers
= alexnet('Weights','none'
)
Ejemplos
Descargar el paquete de soporte de AlexNet
Descargue e instale el paquete de soporte Deep Learning Toolbox Model for AlexNet Network.
Escriba alexnet
en la línea de comandos.
alexnet
Si el paquete de soporte Deep Learning Toolbox Model for AlexNet Network no está instalado, la función proporciona un enlace al paquete de soporte correspondiente en Add-On Explorer. Para instalar el paquete de soporte, haga clic en el enlace y después en Install. Para comprobar que la instalación se ha realizado correctamente, escriba alexnet
en la línea de comandos.
alexnet
ans = SeriesNetwork with properties: Layers: [25×1 nnet.cnn.layer.Layer]
Si el paquete de soporte requerido está instalado, la función devuelve un objeto SeriesNetwork
.
Visualice la red con Deep Network Designer.
deepNetworkDesigner(alexnet)
Para examinar otras redes neuronales preentrenadas en Deep Network Designer, haga clic en New.
Si necesita descargar una red neuronal, deténgase en la red neuronal deseada y haga clic en Install para abrir Add-On Explorer.
Transferencia del aprendizaje usando AlexNet
Este ejemplo muestra cómo ajustar una red neuronal convolucional AlexNet preentrenada para clasificar una nueva colección de imágenes.
AlexNet se ha entrenado con más de un millón de imágenes y puede clasificarlas en 1000 categorías de objetos (como teclado, taza de café, lápiz y muchos animales). La red ha aprendido representaciones ricas en características para una amplia gama de imágenes. La red toma una imagen como entrada y, a continuación, emite una etiqueta para el objeto en la imagen junto con las probabilidades para cada una de las categorías de objetos.
La transferencia del aprendizaje se suele usar en aplicaciones de deep learning. Se puede usar una red preentrenada como punto de partida para aprender una nueva tarea. Ajustar una red con transferencia del aprendizaje suele ser más rápido y fácil que entrenarla con pesos inicializados al azar de cero. Puede transferir de forma rápida las características aprendidas a una nueva tarea con menos imágenes de entrenamiento.
Cargar datos
Descomprima y cargue las nuevas imágenes como un almacén de datos de imágenes. imageDatastore
etiqueta de forma automática las imágenes basándose en los nombres de las carpetas y almacena los datos como un objeto ImageDatastore
. Un almacén de datos de imágenes permite almacenar un gran volumen de datos de imágenes, incluidos los que no caben en la memoria, y leer eficazmente lotes de imágenes durante el entrenamiento de una red neuronal convolucional.
unzip('MerchData.zip'); imds = imageDatastore('MerchData', ... 'IncludeSubfolders',true, ... 'LabelSource','foldernames');
Divida los datos en conjuntos de datos de entrenamiento y de validación. Utilice el 70% de las imágenes para el entrenamiento y el 30% para la validación. splitEachLabel
divide el almacén de datos de images
en dos nuevos almacenes de datos.
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomized');
Este pequeño conjunto de datos ahora contiene solo 55 imágenes de entrenamiento y 20 imágenes de validación. Visualice algunas imágenes de muestra.
numTrainImages = numel(imdsTrain.Labels); idx = randperm(numTrainImages,16); figure for i = 1:16 subplot(4,4,i) I = readimage(imdsTrain,idx(i)); imshow(I) end
Cargar una red preentrenada
Cargue la red neuronal AlexNet preentrenada. Si no se ha instalado Deep Learning Toolbox™ Model for AlexNet Network, el software proporciona un enlace de descarga. AlexNet se ha entrenado con más de un millón de imágenes y puede clasificar imágenes en 1000 categorías de objetos (por ejemplo, teclado, ratón, lápiz y muchos animales). Como resultado, el modelo ha aprendido representaciones ricas en características para una amplia gama de imágenes.
net = alexnet;
Utilice analyzeNetwork
para obtener una visualización interactiva de la arquitectura de la red e información detallada sobre sus capas.
analyzeNetwork(net)
La primera capa, la de entrada de imágenes, requiere imágenes de entrada de un tamaño de 227 por 227 por 3, donde 3 es el número de canales de color.
inputSize = net.Layers(1).InputSize
inputSize = 1×3
227 227 3
Sustituir capas finales
Las últimas tres capas de la red net
preentrenada están configuradas para 1000 clases. Es preciso ajustar las tres capas para el problema de clasificación nuevo. Extraiga todas las capas, excepto las tres últimas, de la red preentrenada.
layersTransfer = net.Layers(1:end-3);
Transfiera las capas a la tarea de clasificación nueva sustituyendo las últimas tres capas por una capa totalmente conectada, una capa softmax y una capa de salida de clasificación. Especifique las opciones de la nueva capa totalmente conectada según los datos nuevos. Establezca que la capa totalmente conectada tenga el mismo tamaño que el número de clases de los datos nuevos. Para que el aprendizaje sea más rápido en las capas nuevas que en las capas transferidas, aumente los valores de WeightLearnRateFactor
y BiasLearnRateFactor
en la capa totalmente conectada.
numClasses = numel(categories(imdsTrain.Labels))
numClasses = 5
layers = [ layersTransfer fullyConnectedLayer(numClasses,'WeightLearnRateFactor',20,'BiasLearnRateFactor',20) softmaxLayer classificationLayer];
Entrenar la red
La red requiere imágenes de entrada de un tamaño de 227 por 227 por 3, pero las imágenes de los almacenes de datos de imágenes tienen diferentes tamaños. Utilice un almacén de datos de imágenes aumentado para cambiar automáticamente el tamaño de las imágenes de entrenamiento. Especifique operaciones de aumento adicionales para realizar en las imágenes de entrenamiento: voltear aleatoriamente las imágenes de entrenamiento a lo largo del eje vertical y trasladarlas aleatoriamente hasta 30 píxeles horizontal y verticalmente. El aumento de datos ayuda a evitar que la red se sobreajuste y memorice los detalles exactos de las imágenes de entrenamiento.
pixelRange = [-30 30]; imageAugmenter = imageDataAugmenter( ... 'RandXReflection',true, ... 'RandXTranslation',pixelRange, ... 'RandYTranslation',pixelRange); augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain, ... 'DataAugmentation',imageAugmenter);
Para cambiar el tamaño de las imágenes de validación de forma automática sin realizar más aumentos de datos, utilice un almacén de datos de imágenes aumentadas sin especificar ninguna operación adicional de preprocesamiento.
augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);
Especifique las opciones de entrenamiento. Para la transferencia del aprendizaje, mantenga las características de las primeras capas de la red preentrenada (los pesos de las capas transferidas). Para ralentizar el aprendizaje en las capas transferidas, establezca la tasa de aprendizaje inicial en un valor pequeño. En el paso anterior, aumentó los factores de la tasa de aprendizaje de la capa totalmente conectada para acelerar el aprendizaje en las nuevas capas finales. Esta combinación de ajustes de la tasa de aprendizaje da como resultado un aprendizaje rápido solo en las capas nuevas y un aprendizaje más lento en las demás. Al realizar la transferencia del aprendizaje, no es necesario entrenar durante tantas épocas. Una época es un ciclo de entrenamiento completo en el conjunto total de datos de entrenamiento. Especifique el tamaño del minilote y los datos de validación. El software valida la red cada iteración de ValidationFrequency
durante el entrenamiento.
options = trainingOptions('sgdm', ... 'MiniBatchSize',10, ... 'MaxEpochs',6, ... 'InitialLearnRate',1e-4, ... 'Shuffle','every-epoch', ... 'ValidationData',augimdsValidation, ... 'ValidationFrequency',3, ... 'Verbose',false, ... 'Plots','training-progress');
Entrene la red formada por las capas transferidas y las nuevas. De forma predeterminada, trainNetwork
usa una GPU en caso de que esté disponible. De lo contrario, usa una CPU. Entrenar en una GPU requiere Parallel Computing Toolbox™ y un dispositivo GPU compatible. Para obtener información sobre los dispositivos compatibles, consulte GPU Computing Requirements (Parallel Computing Toolbox). También puede especificar el entorno de ejecución con el argumento de par nombre-valor 'ExecutionEnvironment'
de trainingOptions
.
netTransfer = trainNetwork(augimdsTrain,layers,options);
Clasificar imágenes de validación
Clasifique las imágenes de validación utilizando la red ajustada.
[YPred,scores] = classify(netTransfer,augimdsValidation);
Visualice cuatro imágenes de validación de muestra con etiquetas predichas.
idx = randperm(numel(imdsValidation.Files),4); figure for i = 1:4 subplot(2,2,i) I = readimage(imdsValidation,idx(i)); imshow(I) label = YPred(idx(i)); title(string(label)); end
Calcule la precisión de la clasificación en el conjunto de validación. La precisión es la fracción de etiquetas que la red predice correctamente.
YValidation = imdsValidation.Labels; accuracy = mean(YPred == YValidation)
accuracy = 1
Para obtener consejos para mejorar la precisión de la clasificación, consulte Deep Learning Tips and Tricks.
Clasificar una imagen con AlexNet
Lea una imagen, cambie su tamaño y clasifíquela con AlexNet. Primero, cargue un modelo AlexNet preentrenado.
net = alexnet;
Lea la imagen con imread
.
I = imread('peppers.png');
figure
imshow(I)
El modelo preentrenado requiere que el tamaño de la imagen coincida con el tamaño de entrada de la red. Determine el tamaño de entrada de la red con la propiedad InputSize
de la primera capa de la red.
sz = net.Layers(1).InputSize
sz = 1×3
227 227 3
Cambie el tamaño de la imagen para que coincida con el tamaño de entrada de la red.
I = imresize(I,sz(1:2)); figure imshow(I)
Clasifique la imagen con classify
.
label = classify(net,I)
label = categorical
bell pepper
Muestre la imagen y el resultado de clasificación juntos.
figure imshow(I) title(label)
Extracción de características con AlexNet
Este ejemplo muestra cómo extraer las características de la imagen aprendidas de una red neuronal convolucional preentrenada y cómo utilizar esas características para entrenar un clasificador de imágenes. La extracción de características es la forma más rápida y sencilla de utilizar la capacidad de representación de las redes profundas preentrenadas. Por ejemplo, puede entrenar una máquina de vectores de soporte (SVM) utilizando fitcecoc
(Statistics and Machine Learning Toolbox™) en las características extraídas. Como la extracción de características solo requiere una única pasada por los datos, es un buen punto de partida si no tiene una GPU con la que acelerar el entrenamiento de la red.
Cargar datos
Descomprima y cargue las imágenes de muestra como un almacén de datos de imágenes. imageDatastore
etiqueta de forma automática las imágenes basándose en los nombres de las carpetas y almacena los datos como un objeto ImageDatastore
. Un almacén de datos de imágenes permite almacenar un gran volumen de datos de imágenes, incluidos los que no caben en la memoria. Divida los datos en un 70% de datos de entrenamiento y un 30% de datos de prueba.
unzip('MerchData.zip'); imds = imageDatastore('MerchData', ... 'IncludeSubfolders',true, ... 'LabelSource','foldernames'); [imdsTrain,imdsTest] = splitEachLabel(imds,0.7,'randomized');
Ahora hay 55 imágenes de entrenamiento y 20 imágenes de validación en este pequeño conjunto de datos. Visualice algunas imágenes de muestra.
numImagesTrain = numel(imdsTrain.Labels); idx = randperm(numImagesTrain,16); for i = 1:16 I{i} = readimage(imdsTrain,idx(i)); end figure imshow(imtile(I))
Cargar una red preentrenada
Cargue una red AlexNet preentrenada. Si no se ha instalado el paquete de soporte Deep Learning Toolbox Model for AlexNet Network, el software proporciona un enlace de descarga. AlexNet se ha entrenado con más de un millón de imágenes y puede clasificar imágenes en 1000 categorías de objetos. Por ejemplo, teclado, ratón, lápiz y muchos animales. Como resultado, el modelo ha aprendido representaciones ricas en características para una amplia gama de imágenes.
net = alexnet;
Muestre la arquitectura de la red. La red tiene cinco capas convolucionales y tres capas totalmente conectadas.
net.Layers
ans = 25x1 Layer array with layers: 1 'data' Image Input 227x227x3 images with 'zerocenter' normalization 2 'conv1' Convolution 96 11x11x3 convolutions with stride [4 4] and padding [0 0 0 0] 3 'relu1' ReLU ReLU 4 'norm1' Cross Channel Normalization cross channel normalization with 5 channels per element 5 'pool1' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0] 6 'conv2' Grouped Convolution 2 groups of 128 5x5x48 convolutions with stride [1 1] and padding [2 2 2 2] 7 'relu2' ReLU ReLU 8 'norm2' Cross Channel Normalization cross channel normalization with 5 channels per element 9 'pool2' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0] 10 'conv3' Convolution 384 3x3x256 convolutions with stride [1 1] and padding [1 1 1 1] 11 'relu3' ReLU ReLU 12 'conv4' Grouped Convolution 2 groups of 192 3x3x192 convolutions with stride [1 1] and padding [1 1 1 1] 13 'relu4' ReLU ReLU 14 'conv5' Grouped Convolution 2 groups of 128 3x3x192 convolutions with stride [1 1] and padding [1 1 1 1] 15 'relu5' ReLU ReLU 16 'pool5' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0] 17 'fc6' Fully Connected 4096 fully connected layer 18 'relu6' ReLU ReLU 19 'drop6' Dropout 50% dropout 20 'fc7' Fully Connected 4096 fully connected layer 21 'relu7' ReLU ReLU 22 'drop7' Dropout 50% dropout 23 'fc8' Fully Connected 1000 fully connected layer 24 'prob' Softmax softmax 25 'output' Classification Output crossentropyex with 'tench' and 999 other classes
La primera capa, la de entrada de imágenes, requiere imágenes de entrada de un tamaño de 227 por 227 por 3, donde 3 es el número de canales de color.
inputSize = net.Layers(1).InputSize
inputSize = 1×3
227 227 3
Extraer características de imágenes
La red construye una representación jerárquica de las imágenes de entrada. Las capas más profundas contienen características de nivel más alto construidas con las características de nivel más bajo de capas anteriores. Para obtener las representaciones de las características de las imágenes de entrenamiento y de prueba, utilice activations
en la capa totalmente conectada 'fc7'
. Para obtener una representación de nivel más bajo de las imágenes, utilice una capa anterior de la red.
La red requiere imágenes de entrada de un tamaño de 227 por 227 por 3, pero las imágenes de los almacenes de datos de imágenes tienen diferentes tamaños. Para cambiar automáticamente el tamaño de las imágenes de entrenamiento y de prueba antes de introducirlas en la red, cree almacenes de datos de imágenes aumentados, especifique el tamaño de imagen deseado y utilice estos almacenes de datos como argumentos de entrada de activations
.
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain); augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest); layer = 'fc7'; featuresTrain = activations(net,augimdsTrain,layer,'OutputAs','rows'); featuresTest = activations(net,augimdsTest,layer,'OutputAs','rows');
Extraiga las etiquetas de clase de los datos de entrenamiento y de prueba.
YTrain = imdsTrain.Labels; YTest = imdsTest.Labels;
Ajustar el clasificador de imágenes
Utilice las características extraídas de las imágenes de entrenamiento como variables predictoras y ajuste una máquina de vectores de soporte (SVM) multiclase con fitcecoc
(Statistics and Machine Learning Toolbox).
mdl = fitcecoc(featuresTrain,YTrain);
Clasificar imágenes de prueba
Clasifique las imágenes de prueba con el modelo de SVM entrenado y las características extraídas de las imágenes de prueba.
YPred = predict(mdl,featuresTest);
Muestre cuatro imágenes de prueba de muestra con etiquetas predichas.
idx = [1 5 10 15]; figure for i = 1:numel(idx) subplot(2,2,i) I = readimage(imdsTest,idx(i)); label = YPred(idx(i)); imshow(I) title(label) end
Calcule la precisión de clasificación en el conjunto de prueba. La precisión es la fracción de etiquetas que la red predice correctamente.
accuracy = mean(YPred == YTest)
accuracy = 1
Esta SVM tiene una precisión alta. Si la precisión no es lo suficientemente alta utilizando la extracción de características, pruebe la transferencia del aprendizaje en su lugar.
Argumentos de salida
net
— Red neuronal convolucional AlexNet preentrenada
objeto SeriesNetwork
Red neuronal convolucional AlexNet preentrenada, devuelta como un objeto SeriesNetwork
.
layers
— Arquitectura de red neuronal convolucional AlexNet sin entrenar
arreglo Layer
Arquitectura de red neuronal convolucional AlexNet sin entrenar, devuelta como un arreglo Layer
.
Sugerencias
Para ver una introducción práctica gratuita a métodos de deep learning prácticos, consulte Deep Learning Onramp.
Referencias
[1] ImageNet. http://www.image-net.org
[2] Russakovsky, O., Deng, J., Su, H., et al. "ImageNet Large Scale Visual Recognition Challenge." International Journal of Computer Vision (IJCV). Vol 115, Issue 3, 2015, pp. 211–252
[3] Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. "ImageNet Classification with Deep Convolutional Neural Networks." Advances in neural information processing systems. 2012.
[4] BVLC AlexNet Model. https://github.com/BVLC/caffe/tree/master/models/bvlc_alexnet
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Para generar código, puede cargar la red mediante la sintaxis net = alexnet
o pasando la función alexnet
a coder.loadDeepLearningNetwork
(MATLAB Coder). Por ejemplo, net = coder.loadDeepLearningNetwork('alexnet')
.
Para obtener más información, consulte Load Pretrained Networks for Code Generation (MATLAB Coder).
La sintaxis alexnet('Weights','none')
no es compatible con la generación de código.
Generación de código de GPU
Genere código CUDA® para GPU NVIDIA® mediante GPU Coder™.
Notas y limitaciones de uso:
Para generar código, puede cargar la red mediante la sintaxis
net = alexnet
o pasando la funciónalexnet
acoder.loadDeepLearningNetwork
(GPU Coder). Por ejemplo,net = coder.loadDeepLearningNetwork('alexnet')
.Para obtener más información, consulte Load Pretrained Networks for Code Generation (GPU Coder).
La sintaxis
alexnet('Weights','none')
no es compatible con la generación de código GPU.
Historial de versiones
Introducido en R2017a
Consulte también
Deep Network Designer | vgg16
| vgg19
| resnet18
| resnet50
| densenet201
| googlenet
| inceptionresnetv2
| squeezenet
| importKerasNetwork
| importCaffeNetwork
Abrir ejemplo
Tiene una versión modificada de este ejemplo. ¿Desea abrir este ejemplo con sus modificaciones?
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)