En este ejemplo se muestra cómo visualizar la información de cuantificación para una red neuronal.
Cargue la red preentrenada. net
es una red neuronal convolucional de SqueezeNet que se ha reentrenado usando la transferencia del aprendizaje para clasificar imágenes en el conjunto de datos de MerchData
.
net =
dlnetwork with properties:
Layers: [67×1 nnet.cnn.layer.Layer]
Connections: [74×2 table]
Learnables: [52×3 table]
State: [0×3 table]
InputNames: {'data'}
OutputNames: {'prob'}
Initialized: 1
View summary with summary.
Utilice la función quantizationDetails para ver que la red no está cuantificada.
qDetails_original = struct with fields:
IsQuantized: 0
TargetLibrary: ""
QuantizedLayerNames: [0×0 string]
QuantizedLearnables: [0×3 table]
El campo IsQuantized
devuelve 0
(false) porque la red original usa el tipo de datos de precisión simple y de punto flotante.
Descomprima y cargue las imágenes de MerchData como un almacén de datos de imágenes. Defina un objeto augmentedImageDatastore para modificar el tamaño de los datos para la red y dividir los datos en conjuntos de calibración y validación para su uso en la cuantificación.
Cree un objeto dlquantizer
y especifique la red que se debe cuantificar. Establezca el entorno de ejecución en MATLAB. Cuando utiliza el entorno de ejecución de MATLAB, la cuantificación se lleva a cabo con el tipo de datos de punto fijo fi
que requiere una licencia de Fixed-Point Designer™.
Utilice la función de calibración para entrenar la red con entradas de muestra y recopilar información de intervalos.
Utilice el método quantize
para cuantificar el objeto de red y devolver una red cuantificada que se puede simular.
qNet =
Quantized dlnetwork with properties:
Layers: [67×1 nnet.cnn.layer.Layer]
Connections: [74×2 table]
Learnables: [52×3 table]
State: [0×3 table]
InputNames: {'data'}
OutputNames: {'prob'}
Initialized: 1
View summary with summary.
Use the quantizationDetails function to extract quantization details.
Utilice el método quantizationDetails
para extraer la información de cuantificación.
qDetails = struct with fields:
IsQuantized: 1
TargetLibrary: "none"
QuantizedLayerNames: [53×1 string]
QuantizedLearnables: [52×3 table]
Inspeccione el campo QuantizedLayerNames
para ver una lista de capas cuantificadas.
ans = 53×1 string
"conv1"
"relu_conv1"
"fire2-squeeze1x1"
"fire2-relu_squeeze1x1"
"fire2-expand1x1"
"fire2-relu_expand1x1"
"fire2-expand3x3"
"fire2-relu_expand3x3"
"fire3-squeeze1x1"
"fire3-relu_squeeze1x1"
"fire3-expand1x1"
"fire3-relu_expand1x1"
"fire3-expand3x3"
"fire3-relu_expand3x3"
"fire4-squeeze1x1"
"fire4-relu_squeeze1x1"
"fire4-expand1x1"
"fire4-relu_expand1x1"
"fire4-expand3x3"
"fire4-relu_expand3x3"
"fire5-squeeze1x1"
"fire5-relu_squeeze1x1"
"fire5-expand1x1"
"fire5-relu_expand1x1"
"fire5-expand3x3"
"fire5-relu_expand3x3"
"fire6-squeeze1x1"
"fire6-relu_squeeze1x1"
"fire6-expand1x1"
"fire6-relu_expand1x1"
⋮
Inspeccione el campo QuantizedLearnables
para ver los valores cuantificados para parámetros que se pueden aprender en la red.
ans=52×3 table
Layer Parameter Value
__________________ _________ __________________
"conv1" "Weights" {3×3×3×64 int8 }
"conv1" "Bias" {1×1×64 int32}
"fire2-squeeze1x1" "Weights" {1×1×64×16 int8 }
"fire2-squeeze1x1" "Bias" {1×1×16 int32}
"fire2-expand1x1" "Weights" {1×1×16×64 int8 }
"fire2-expand1x1" "Bias" {1×1×64 int32}
"fire2-expand3x3" "Weights" {3×3×16×64 int8 }
"fire2-expand3x3" "Bias" {1×1×64 int32}
"fire3-squeeze1x1" "Weights" {1×1×128×16 int8 }
"fire3-squeeze1x1" "Bias" {1×1×16 int32}
"fire3-expand1x1" "Weights" {1×1×16×64 int8 }
"fire3-expand1x1" "Bias" {1×1×64 int32}
"fire3-expand3x3" "Weights" {3×3×16×64 int8 }
"fire3-expand3x3" "Bias" {1×1×64 int32}
"fire4-squeeze1x1" "Weights" {1×1×128×32 int8 }
"fire4-squeeze1x1" "Bias" {1×1×32 int32}
⋮