Квантование и проверка глубокой нейронной сети
квантует веса, смещения и активации в слоях свертки сети и проверяет правильность сети, указанной validationResults = validate(quantObj, valData)dlquantizer объект, quantObj и используя данные, указанные valData.
квантует веса, смещения и активации в слоях свертки сети и проверяет правильность сети, указанной validationResults = validate(quantObj, valData, quantOpts)dlquantizer объект, quantObj, используя данные, указанные valDataи необязательный аргумент quantOpts которая определяет метрическую функцию для оценки производительности квантованной сети.
Сведения о продуктах, необходимых для квантования глубокой нейронной сети, см. в разделе Предварительные условия потока операций квантования.
В этом примере показано, как квантовать обучаемые параметры в слоях свертки нейронной сети и исследовать поведение квантованной сети. В этом примере квантуется squeezenet нейросеть после переподготовки сети для классификации новых изображений в соответствии с примером Train Deep Learning Network для классификации новых изображений. В этом примере память, необходимая для сети, уменьшается приблизительно на 75% за счет квантования, в то время как точность сети не изменяется.
Загрузите предварительно обученную сеть. net. net - выходная сеть обучающей сети Train Deep Learning Network для классификации новых изображений.
net
net =
DAGNetwork with properties:
Layers: [68x1 nnet.cnn.layer.Layer]
Connections: [75x2 table]
InputNames: {'data'}
OutputNames: {'new_classoutput'}Определите данные калибровки и проверки для квантования.
Данные калибровки используются для сбора динамических диапазонов весов и смещений в сверточных и полностью соединенных слоях сети и динамических диапазонов активизаций во всех слоях сети. Для наилучших результатов квантования калибровочные данные должны быть репрезентативными для входных данных сети.
Данные проверки достоверности используются для проверки сети после квантования, чтобы понять влияние ограниченного диапазона и точности квантованных уровней свертки в сети.
В этом примере используйте изображения в MerchData набор данных. Определение augmentedImageDatastore объект для изменения размера данных в сети. Затем разбейте данные на наборы данных калибровки и проверки.
unzip('MerchData.zip'); imds = imageDatastore('MerchData', ... 'IncludeSubfolders',true, ... 'LabelSource','foldernames'); [calData, valData] = splitEachLabel(imds, 0.7, 'randomized'); aug_calData = augmentedImageDatastore([227 227], calData); aug_valData = augmentedImageDatastore([227 227], valData);
Создать dlquantizer и укажите сеть для квантования.
quantObj = dlquantizer(net);
Определите метрическую функцию для сравнения поведения сети до и после квантования. Сохраните эту функцию в локальном файле.
function accuracy = hComputeModelAccuracy(predictionScores, net, dataStore) %% Computes model-level accuracy statistics % Load ground truth tmp = readall(dataStore); groundTruth = tmp.response; % Compare with predicted label with actual ground truth predictionError = {}; for idx=1:numel(groundTruth) [~, idy] = max(predictionScores(idx,:)); yActual = net.Layers(end).Classes(idy); predictionError{end+1} = (yActual == groundTruth(idx)); %#ok end % Sum all prediction errors. predictionError = [predictionError{:}]; accuracy = sum(predictionError)/numel(predictionError); end
Укажите метрическую функцию в dlquantizationOptions объект.
quantOpts = dlquantizationOptions('MetricFcn', ... {@(x)hComputeModelAccuracy(x, net, aug_valData)});
Используйте calibrate функция для осуществления сети с входами образцов и сбора информации о дальности. calibrate функция выполняет сеть и собирает динамические диапазоны весов и смещений в свертке и полностью соединенных уровнях сети и динамические диапазоны активизаций во всех уровнях сети. Функция возвращает таблицу. Каждая строка таблицы содержит информацию о диапазоне для обучаемого параметра оптимизированной сети.
calResults = calibrate(quantObj, aug_calData)
calResults =
95x5 table
Optimized Layer Name Network Layer Name Learnables / Activations MinValue MaxValue
__________________________________________________ _________________________ ________________________ __________ ___________
{'conv1_relu_conv1_Weights' } {'relu_conv1' } "Weights" -0.91985 0.88489
{'conv1_relu_conv1_Bias' } {'relu_conv1' } "Bias" -0.07925 0.26343
{'fire2-squeeze1x1_fire2-relu_squeeze1x1_Weights'} {'fire2-relu_squeeze1x1'} "Weights" -1.38 1.2477
{'fire2-squeeze1x1_fire2-relu_squeeze1x1_Bias' } {'fire2-relu_squeeze1x1'} "Bias" -0.11641 0.24273
{'fire2-expand1x1_fire2-relu_expand1x1_Weights' } {'fire2-relu_expand1x1' } "Weights" -0.7406 0.90982
{'fire2-expand1x1_fire2-relu_expand1x1_Bias' } {'fire2-relu_expand1x1' } "Bias" -0.060056 0.14602
{'fire2-expand3x3_fire2-relu_expand3x3_Weights' } {'fire2-relu_expand3x3' } "Weights" -0.74397 0.66905
{'fire2-expand3x3_fire2-relu_expand3x3_Bias' } {'fire2-relu_expand3x3' } "Bias" -0.051778 0.074239
{'fire3-squeeze1x1_fire3-relu_squeeze1x1_Weights'} {'fire3-relu_squeeze1x1'} "Weights" -0.77263 0.68897
{'fire3-squeeze1x1_fire3-relu_squeeze1x1_Bias' } {'fire3-relu_squeeze1x1'} "Bias" -0.10141 0.32678
{'fire3-expand1x1_fire3-relu_expand1x1_Weights' } {'fire3-relu_expand1x1' } "Weights" -0.72131 0.97287
{'fire3-expand1x1_fire3-relu_expand1x1_Bias' } {'fire3-relu_expand1x1' } "Bias" -0.067043 0.30424
{'fire3-expand3x3_fire3-relu_expand3x3_Weights' } {'fire3-relu_expand3x3' } "Weights" -0.61196 0.77431
{'fire3-expand3x3_fire3-relu_expand3x3_Bias' } {'fire3-relu_expand3x3' } "Bias" -0.053612 0.10329
{'fire4-squeeze1x1_fire4-relu_squeeze1x1_Weights'} {'fire4-relu_squeeze1x1'} "Weights" -0.74145 1.0888
{'fire4-squeeze1x1_fire4-relu_squeeze1x1_Bias' } {'fire4-relu_squeeze1x1'} "Bias" -0.10886 0.13882
...Используйте validate функция для квантования обучаемых параметров в уровнях свертки сети и осуществления сети. Функция использует метрическую функцию, определенную в dlquantizationOptions объект для сравнения результатов сети до и после квантования.
valResults = validate(quantObj, aug_valData, quantOpts)
valResults =
struct with fields:
NumSamples: 20
MetricResults: [1x1 struct]Осмотрите MetricResults.Result поле выходного сигнала проверки, чтобы увидеть производительность квантованной сети.
valResults.MetricResults.Result
ans =
2x3 table
NetworkImplementation MetricOutput LearnableParameterMemory(bytes)
_____________________ ____________ _______________________________
{'Floating-Point'} 1 2.9003e+06
{'Quantized' } 1 7.3393e+05
В этом примере память, необходимая для сети, была уменьшена приблизительно на 75% посредством квантования. На точность сети это не влияет.
Веса, смещения и активизации слоев свертки сети, указанных в dlquantizer теперь объект использует масштабированные 8-разрядные целочисленные типы данных.
В этом примере показано, как квантовать обучаемые параметры в слоях свертки нейронной сети и исследовать поведение квантованной сети. В этом примере квантуется LogoNet нейронная сеть. Квантование помогает уменьшить потребность в памяти глубокой нейронной сети за счет квантования весов, смещений и активизаций сетевых уровней до 8-битных масштабированных целочисленных типов данных. Используйте MATLAB ® для извлечения результатов прогнозирования из целевого устройства .
Для выполнения этого примера необходимы продукты, перечисленные в разделе FPGA в предпосылках потока операций квантования.
Дополнительные требования см. в разделе Предпосылки потока операций квантования.
Создание файла в текущей рабочей папке с именем getLogoNetwork.m. Введите в файл следующие строки:
function net = getLogoNetwork() data = getLogoData(); net = data.convnet; end function data = getLogoData() if ~isfile('LogoNet.mat') url = 'https://www.mathworks.com/supportfiles/gpucoder/cnn_models/logo_detection/LogoNet.mat'; websave('LogoNet.mat',url); end data = load('LogoNet.mat'); end
Загрузите предварительно обученную сеть.
snet = getLogoNetwork();
snet =
SeriesNetwork with properties:
Layers: [22×1 nnet.cnn.layer.Layer]
InputNames: {'imageinput'}
OutputNames: {'classoutput'}Определите данные калибровки и проверки для квантования.
Данные калибровки используются для сбора динамических диапазонов весов и смещений в сверточных и полностью соединенных слоях сети и динамических диапазонов активизаций во всех слоях сети. Для наилучших результатов квантования калибровочные данные должны быть репрезентативными для входных данных сети.
Данные проверки достоверности используются для проверки сети после квантования, чтобы понять влияние ограниченного диапазона и точности квантованных уровней свертки в сети.
В этом примере используются изображения в logos_dataset набор данных. Определение augmentedImageDatastore объект для изменения размера данных в сети. Затем разбейте данные на наборы данных калибровки и проверки.
curDir = pwd; newDir = fullfile(matlabroot,'examples','deeplearning_shared','data','logos_dataset.zip'); copyfile(newDir,curDir); unzip('logos_dataset.zip'); imageData = imageDatastore(fullfile(curDir,'logos_dataset'),... 'IncludeSubfolders',true,'FileExtensions','.JPG','LabelSource','foldernames'); [calibrationData, validationData] = splitEachLabel(imageData, 0.5,'randomized');
Создать dlquantizer и укажите сеть для квантования.
dlQuantObj = dlquantizer(snet,'ExecutionEnvironment','FPGA');
Используйте calibrate функция для осуществления сети с входами образцов и сбора информации о дальности. calibrate функция выполняет сеть и собирает динамические диапазоны весов и смещений в свертке и полностью соединенных уровнях сети и динамические диапазоны активизаций во всех уровнях сети. Функция возвращает таблицу. Каждая строка таблицы содержит информацию о диапазоне для обучаемого параметра оптимизированной сети.
dlQuantObj.calibrate(calibrationData)
ans =
Optimized Layer Name Network Layer Name Learnables / Activations MinValue MaxValue
____________________________ __________________ ________________________ ___________ __________
{'conv_1_Weights' } {'conv_1' } "Weights" -0.048978 0.039352
{'conv_1_Bias' } {'conv_1' } "Bias" 0.99996 1.0028
{'conv_2_Weights' } {'conv_2' } "Weights" -0.055518 0.061901
{'conv_2_Bias' } {'conv_2' } "Bias" -0.00061171 0.00227
{'conv_3_Weights' } {'conv_3' } "Weights" -0.045942 0.046927
{'conv_3_Bias' } {'conv_3' } "Bias" -0.0013998 0.0015218
{'conv_4_Weights' } {'conv_4' } "Weights" -0.045967 0.051
{'conv_4_Bias' } {'conv_4' } "Bias" -0.00164 0.0037892
{'fc_1_Weights' } {'fc_1' } "Weights" -0.051394 0.054344
{'fc_1_Bias' } {'fc_1' } "Bias" -0.00052319 0.00084454
{'fc_2_Weights' } {'fc_2' } "Weights" -0.05016 0.051557
{'fc_2_Bias' } {'fc_2' } "Bias" -0.0017564 0.0018502
{'fc_3_Weights' } {'fc_3' } "Weights" -0.050706 0.04678
{'fc_3_Bias' } {'fc_3' } "Bias" -0.02951 0.024855
{'imageinput' } {'imageinput'} "Activations" 0 255
{'imageinput_normalization'} {'imageinput'} "Activations" -139.34 198.72
Создайте целевой объект с пользовательским именем для целевого устройства и интерфейсом для подключения целевого устройства к хост-компьютеру. Опции интерфейса - JTAG и Ethernet. Для создания целевого объекта введите:
hTarget = dlhdl.Target('Intel', 'Interface', 'JTAG');
Определите метрическую функцию для сравнения поведения сети до и после квантования. Сохраните эту функцию в локальном файле.
function accuracy = hComputeModelAccuracy(predictionScores, net, dataStore) %% hComputeModelAccuracy test helper function computes model level accuracy statistics % Copyright 2020 The MathWorks, Inc. % Load ground truth groundTruth = dataStore.Labels; % Compare with predicted label with actual ground truth predictionError = {}; for idx=1:numel(groundTruth) [~, idy] = max(predictionScores(idx, :)); yActual = net.Layers(end).Classes(idy); predictionError{end+1} = (yActual == groundTruth(idx)); %#ok end % Sum all prediction errors. predictionError = [predictionError{:}]; accuracy = sum(predictionError)/numel(predictionError); end
Укажите метрическую функцию в dlquantizationOptions объект.
options = dlquantizationOptions('MetricFcn', ... {@(x)hComputeModelAccuracy(x, snet, validationData)},'Bitstream','arria10soc_int8',... 'Target',hTarget);
Для компиляции и развертывания квантованной сети запустите validate функции dlquantizer объект. Используйте validate функция для квантования обучаемых параметров в уровнях свертки сети и осуществления сети. Эта функция использует выходные данные функции компиляции для программирования платы FPGA с помощью файла программирования. Он также загружает веса сети и отклонения. Функция развертывания проверяет наличие инструмента Intel Quartus и поддерживаемую версию инструмента. Затем он начинает программировать устройство FPGA с помощью файла sof, отображает сообщения о ходе выполнения и время, необходимое для развертывания сети. Функция использует метрическую функцию, определенную в dlquantizationOptions объект для сравнения результатов сети до и после квантования.
prediction = dlQuantObj.validate(validationData,options);
offset_name offset_address allocated_space
_______________________ ______________ _________________
"InputDataOffset" "0x00000000" "48.0 MB"
"OutputResultOffset" "0x03000000" "4.0 MB"
"SystemBufferOffset" "0x03400000" "60.0 MB"
"InstructionDataOffset" "0x07000000" "8.0 MB"
"ConvWeightDataOffset" "0x07800000" "8.0 MB"
"FCWeightDataOffset" "0x08000000" "12.0 MB"
"EndOffset" "0x08c00000" "Total: 140.0 MB"
### Programming FPGA Bitstream using JTAG...
### Programming the FPGA bitstream has been completed successfully.
### Loading weights to Conv Processor.
### Conv Weights loaded. Current time is 16-Jul-2020 12:45:10
### Loading weights to FC Processor.
### FC Weights loaded. Current time is 16-Jul-2020 12:45:26
### Finished writing input activations.
### Running single input activations.
Deep Learning Processor Profiler Performance Results
LastLayerLatency(cycles) LastLayerLatency(seconds) FramesNum Total Latency Frames/s
------------- ------------- --------- --------- ---------
Network 13570959 0.09047 30 380609145 11.8
conv_module 12667786 0.08445
conv_1 3938907 0.02626
maxpool_1 1544560 0.01030
conv_2 2910954 0.01941
maxpool_2 577524 0.00385
conv_3 2552707 0.01702
maxpool_3 676542 0.00451
conv_4 455434 0.00304
maxpool_4 11251 0.00008
fc_module 903173 0.00602
fc_1 536164 0.00357
fc_2 342643 0.00228
fc_3 24364 0.00016
* The clock frequency of the DL processor is: 150MHz
### Finished writing input activations.
### Running single input activations.
Deep Learning Processor Profiler Performance Results
LastLayerLatency(cycles) LastLayerLatency(seconds) FramesNum Total Latency Frames/s
------------- ------------- --------- --------- ---------
Network 13570364 0.09047 30 380612682 11.8
conv_module 12667103 0.08445
conv_1 3939296 0.02626
maxpool_1 1544371 0.01030
conv_2 2910747 0.01940
maxpool_2 577654 0.00385
conv_3 2551829 0.01701
maxpool_3 676548 0.00451
conv_4 455396 0.00304
maxpool_4 11355 0.00008
fc_module 903261 0.00602
fc_1 536206 0.00357
fc_2 342688 0.00228
fc_3 24365 0.00016
* The clock frequency of the DL processor is: 150MHz
### Finished writing input activations.
### Running single input activations.
Deep Learning Processor Profiler Performance Results
LastLayerLatency(cycles) LastLayerLatency(seconds) FramesNum Total Latency Frames/s
------------- ------------- --------- --------- ---------
Network 13571561 0.09048 30 380608338 11.8
conv_module 12668340 0.08446
conv_1 3939070 0.02626
maxpool_1 1545327 0.01030
conv_2 2911061 0.01941
maxpool_2 577557 0.00385
conv_3 2552082 0.01701
maxpool_3 676506 0.00451
conv_4 455582 0.00304
maxpool_4 11248 0.00007
fc_module 903221 0.00602
fc_1 536167 0.00357
fc_2 342643 0.00228
fc_3 24409 0.00016
* The clock frequency of the DL processor is: 150MHz
### Finished writing input activations.
### Running single input activations.
Deep Learning Processor Profiler Performance Results
LastLayerLatency(cycles) LastLayerLatency(seconds) FramesNum Total Latency Frames/s
------------- ------------- --------- --------- ---------
Network 13569862 0.09047 30 380613327 11.8
conv_module 12666756 0.08445
conv_1 3939212 0.02626
maxpool_1 1543267 0.01029
conv_2 2911184 0.01941
maxpool_2 577275 0.00385
conv_3 2552868 0.01702
maxpool_3 676438 0.00451
conv_4 455353 0.00304
maxpool_4 11252 0.00008
fc_module 903106 0.00602
fc_1 536050 0.00357
fc_2 342645 0.00228
fc_3 24409 0.00016
* The clock frequency of the DL processor is: 150MHz
### Finished writing input activations.
### Running single input activations.
Deep Learning Processor Profiler Performance Results
LastLayerLatency(cycles) LastLayerLatency(seconds) FramesNum Total Latency Frames/s
------------- ------------- --------- --------- ---------
Network 13570823 0.09047 30 380619836 11.8
conv_module 12667607 0.08445
conv_1 3939074 0.02626
maxpool_1 1544519 0.01030
conv_2 2910636 0.01940
maxpool_2 577769 0.00385
conv_3 2551800 0.01701
maxpool_3 676795 0.00451
conv_4 455859 0.00304
maxpool_4 11248 0.00007
fc_module 903216 0.00602
fc_1 536165 0.00357
fc_2 342643 0.00228
fc_3 24406 0.00016
* The clock frequency of the DL processor is: 150MHz
offset_name offset_address allocated_space
_______________________ ______________ _________________
"InputDataOffset" "0x00000000" "48.0 MB"
"OutputResultOffset" "0x03000000" "4.0 MB"
"SystemBufferOffset" "0x03400000" "60.0 MB"
"InstructionDataOffset" "0x07000000" "8.0 MB"
"ConvWeightDataOffset" "0x07800000" "8.0 MB"
"FCWeightDataOffset" "0x08000000" "12.0 MB"
"EndOffset" "0x08c00000" "Total: 140.0 MB"
### FPGA bitstream programming has been skipped as the same bitstream is already loaded on the target FPGA.
### Deep learning network programming has been skipped as the same network is already loaded on the target FPGA.
### Finished writing input activations.
### Running single input activations.
Deep Learning Processor Profiler Performance Results
LastLayerLatency(cycles) LastLayerLatency(seconds) FramesNum Total Latency Frames/s
------------- ------------- --------- --------- ---------
Network 13572329 0.09048 10 127265075 11.8
conv_module 12669135 0.08446
conv_1 3939559 0.02626
maxpool_1 1545378 0.01030
conv_2 2911243 0.01941
maxpool_2 577422 0.00385
conv_3 2552064 0.01701
maxpool_3 676678 0.00451
conv_4 455657 0.00304
maxpool_4 11227 0.00007
fc_module 903194 0.00602
fc_1 536140 0.00357
fc_2 342688 0.00228
fc_3 24364 0.00016
* The clock frequency of the DL processor is: 150MHz
### Finished writing input activations.
### Running single input activations.
Deep Learning Processor Profiler Performance Results
LastLayerLatency(cycles) LastLayerLatency(seconds) FramesNum Total Latency Frames/s
------------- ------------- --------- --------- ---------
Network 13572527 0.09048 10 127266427 11.8
conv_module 12669266 0.08446
conv_1 3939776 0.02627
maxpool_1 1545632 0.01030
conv_2 2911169 0.01941
maxpool_2 577592 0.00385
conv_3 2551613 0.01701
maxpool_3 676811 0.00451
conv_4 455418 0.00304
maxpool_4 11348 0.00008
fc_module 903261 0.00602
fc_1 536205 0.00357
fc_2 342689 0.00228
fc_3 24365 0.00016
* The clock frequency of the DL processor is: 150MHzОсмотрите MetricResults.Result поле выходного сигнала проверки, чтобы увидеть производительность квантованной сети.
validateOut = prediction.MetricResults.Result
ans =
NetworkImplementation MetricOutput
_____________________ ____________
{'Floating-Point'} 0.9875
{'Quantized' } 0.9875
Осмотрите QuantizedNetworkFPS поле выходного сигнала проверки достоверности, чтобы видеть производительность кадров в секунду квантованной сети.
prediction.QuantizedNetworkFPS
ans = 11.8126
Веса, смещения и активизации слоев свертки сети, указанных в dlquantizer теперь объект использует масштабированные 8-разрядные целочисленные типы данных.
Этот пример показывает, как квантовать обучаемые параметры в слоях свертки нейронной сети и проверять правильность квантованной сети. Быстрое создание прототипа квантованной сети с использованием моделирования на основе MATLAB для проверки достоверности квантованной сети. Для такого типа моделирования аппаратная плата FPGA не требуется в процессе прототипирования. В этом примере выполняется квантование нейронной сети LogoNet.
Для этого примера необходимы продукты, перечисленные в разделе FPGA в предпосылках потока операций квантования.
Загрузите предварительно обученную сеть и проанализируйте архитектуру сети.
snet = getLogoNetwork; analyzeNetwork(snet);

Определите данные калибровки и проверки для квантования.
В этом примере используется logos_dataset набор данных. Набор данных состоит из 320 изображений. Каждое изображение имеет размер 227 на 227 и имеет три цветовых канала (RGB). Создание augmentedImageDatastore объект, используемый для калибровки и проверки. Ускорьте процесс калибровки и проверки, сократив набор данных калибровки до 20 изображений. Рабочий процесс моделирования MATLAB имеет максимальное ограничение в пять изображений при проверке квантованной сети. Уменьшите размеры набора данных проверки до пяти изображений.
curDir = pwd; newDir = fullfile(matlabroot,'examples','deeplearning_shared','data','logos_dataset.zip'); copyfile(newDir,curDir,'f'); unzip('logos_dataset.zip'); imageData = imageDatastore(fullfile(curDir,'logos_dataset'),... 'IncludeSubfolders',true,'FileExtensions','.JPG','LabelSource','foldernames'); [calibrationData, validationData] = splitEachLabel(imageData, 0.5,'randomized'); calibrationData_reduced = calibrationData.subset(1:20); validationData_reduced = validationData.subset(1:5);
Создание квантованной сети с помощью dlquantizer объект. Для использования среды моделирования MATLAB установите для параметра Моделирование значение on.
dlQuantObj = dlquantizer(snet,'ExecutionEnvironment','FPGA','Simulation','on')
Используйте calibrate функция для выполнения сети с входами образцов и сбора информации о диапазоне. calibrate функция выполняет сеть и собирает динамические диапазоны весов и смещений в свертке и полностью соединенных уровнях сети и динамические диапазоны активизаций во всех уровнях сети. Функция калибровки возвращает таблицу. Каждая строка таблицы содержит информацию о диапазоне для обучаемого параметра квантованной сети.
dlQuantObj.calibrate(calibrationData_reduced)
ans =
35×5 table
Optimized Layer Name Network Layer Name Learnables / Activations MinValue MaxValue
____________________________ __________________ ________________________ ___________ __________
{'conv_1_Weights' } {'conv_1' } "Weights" -0.048978 0.039352
{'conv_1_Bias' } {'conv_1' } "Bias" 0.99996 1.0028
{'conv_2_Weights' } {'conv_2' } "Weights" -0.055518 0.061901
{'conv_2_Bias' } {'conv_2' } "Bias" -0.00061171 0.00227
{'conv_3_Weights' } {'conv_3' } "Weights" -0.045942 0.046927
{'conv_3_Bias' } {'conv_3' } "Bias" -0.0013998 0.0015218
{'conv_4_Weights' } {'conv_4' } "Weights" -0.045967 0.051
{'conv_4_Bias' } {'conv_4' } "Bias" -0.00164 0.0037892
{'fc_1_Weights' } {'fc_1' } "Weights" -0.051394 0.054344
{'fc_1_Bias' } {'fc_1' } "Bias" -0.00052319 0.00084454
{'fc_2_Weights' } {'fc_2' } "Weights" -0.05016 0.051557
{'fc_2_Bias' } {'fc_2' } "Bias" -0.0017564 0.0018502
{'fc_3_Weights' } {'fc_3' } "Weights" -0.050706 0.04678
{'fc_3_Bias' } {'fc_3' } "Bias" -0.02951 0.024855
{'imageinput' } {'imageinput' } "Activations" 0 255
{'imageinput_normalization'} {'imageinput' } "Activations" -139.34 198.11
{'conv_1' } {'conv_1' } "Activations" -431.01 290.14
{'relu_1' } {'relu_1' } "Activations" 0 290.14
{'maxpool_1' } {'maxpool_1' } "Activations" 0 290.14
{'conv_2' } {'conv_2' } "Activations" -166.41 466.4
{'relu_2' } {'relu_2' } "Activations" 0 466.4
{'maxpool_2' } {'maxpool_2' } "Activations" 0 466.4
{'conv_3' } {'conv_3' } "Activations" -219.6 300.65
{'relu_3' } {'relu_3' } "Activations" 0 300.65
{'maxpool_3' } {'maxpool_3' } "Activations" 0 299.73
{'conv_4' } {'conv_4' } "Activations" -245.37 209.11
{'relu_4' } {'relu_4' } "Activations" 0 209.11
{'maxpool_4' } {'maxpool_4' } "Activations" 0 209.11
{'fc_1' } {'fc_1' } "Activations" -123.79 77.114
{'relu_5' } {'relu_5' } "Activations" 0 77.114
{'fc_2' } {'fc_2' } "Activations" -16.557 17.512
{'relu_6' } {'relu_6' } "Activations" 0 17.512
{'fc_3' } {'fc_3' } "Activations" -13.049 37.204
{'softmax' } {'softmax' } "Activations" 1.4971e-22 1
{'classoutput' } {'classoutput'} "Activations" 1.4971e-22 1Задайте целевую метрическую функцию и создайте dlquantizationOptions с целевой метрикой и набором данных проверки. В этом примере целевая метрическая функция вычисляет точность Top-5.
options = dlquantizationOptions('MetricFcn', {@(x)hComputeAccuracy(x,snet,validationData_reduced)});Примечание
Если пользовательская метрическая функция не указана, для проверки будет использоваться метрическая функция по умолчанию. При выборе среды моделирования MATLAB ® функция метрики по умолчанию использует не более 5 файлов из хранилища данных проверки. Пользовательские метрические функции не имеют этого ограничения.
Используйте validate функцию квантования обучаемых параметров на уровнях свертки сети. validate функция моделирует квантованную сеть в MATLAB. validate функция использует метрическую функцию, определенную в dlquantizationOptions объект для сравнения результатов одного сетевого объекта типа данных с результатами квантованного сетевого объекта.
prediction = dlQuantObj.validate(validationData_reduced,options)
### Notice: (Layer 1) The layer 'imageinput' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software.
### Notice: (Layer 2) The layer 'out_imageinput' with type 'nnet.cnn.layer.RegressionOutputLayer' is implemented in software.
Compiling leg: conv_1>>maxpool_4 ...
### Notice: (Layer 1) The layer 'imageinput' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software.
### Notice: (Layer 14) The layer 'output' with type 'nnet.cnn.layer.RegressionOutputLayer' is implemented in software.
Compiling leg: conv_1>>maxpool_4 ... complete.
Compiling leg: fc_1>>fc_3 ...
### Notice: (Layer 1) The layer 'maxpool_4' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software.
### Notice: (Layer 7) The layer 'output' with type 'nnet.cnn.layer.RegressionOutputLayer' is implemented in software.
Compiling leg: fc_1>>fc_3 ... complete.
### Should not enter here. It means a component is unaccounted for in MATLAB Emulation.
### Notice: (Layer 1) The layer 'fc_3' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software.
### Notice: (Layer 2) The layer 'softmax' with type 'nnet.cnn.layer.SoftmaxLayer' is implemented in software.
### Notice: (Layer 3) The layer 'classoutput' with type 'nnet.cnn.layer.ClassificationOutputLayer' is implemented in software.
prediction =
struct with fields:
NumSamples: 5
MetricResults: [1×1 struct]Осмотрите MetricResults.Result поле выходного сигнала проверки, чтобы увидеть производительность квантованной сети.
validateOut = prediction.MetricResults.Result
validateOut =
2×2 table
NetworkImplementation MetricOutput
_____________________ ____________
{'Floating-Point'} 1
{'Quantized' } 1
quantObj - Сеть для квантованияdlquantizer объектdlquantizer объект, определяющий сеть для квантования.
valData - Данные, используемые для проверки правильности квантованной сетиimageDataStore объект | augmentedImageDataStore объект | pixelLabelImageDataStore объектДанные, используемые для проверки квантованной сети, указанные как imageDataStore объект, augmentedImageDataStore объект или pixelLabelImageDataStore объект.
quantOpts - Варианты квантования сетиdlQuantizationOptions объектПараметры квантования сети, указанные как dlquantizationOptions объект.
validationResults - Результаты квантования сетиРезультаты квантования сети, возвращаемые в виде структуры. Структура содержит эти поля.
NumSamples - Количество выборочных входов, используемых для проверки сети.
MetricResults - Структура, содержащая результаты метрической функции, определенной в dlquantizationOptions объект. Если в параметре указано более одной метрической функции dlquantizationOptions объект, MetricResults - массив структур.
MetricResults содержит эти поля.
| Область | Описание |
|---|---|
MetricFunction | Функция, используемая для определения производительности квантованной сети. Эта функция указана в dlquantizationOptions объект. |
Result | Таблица, указывающая результаты метрической функции до и после квантования. Первая строка в таблице содержит информацию для исходной реализации с плавающей запятой. Вторая строка содержит информацию для квантованной реализации. Вывод метрической функции отображается в |
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.