exponenta event banner

Классификация цифр с типами данных половинной точности

В этом примере сравниваются результаты обученной модели классификации нейронных сетей в Simulink ® с двойной точностью и полуточностью. Модель классифицирует изображения из набора данных рукописных цифр MNIST.

Для начала загрузите данные для модели и укажите размер набора тестовых данных.

load trainImage.mat
testSetMaxIdx = 10;

Моделирование модели с использованием типов двойной точности

Эта модель использует numerictype объекты для указания типов выходных данных параметров, сигналов и блоков. Для моделирования модели с использованием типов данных двойной точности определите numerictype объекты в базовой рабочей области и задайте тип данных объектов как 'double'. Моделирование модели.

floatType = numerictype('double');
activationType = numerictype('double');

model = 'ex_imagerecog_half.slx';
open_system(model);
sim(model);

Моделирование с двойной точностью приводит к 100% точности классификации.

[c, ~] = confusion(ttestsubset(:,1:testSetMaxIdx), ytest.Data(2:testSetMaxIdx+1,:)');
fprintf('Percentage Correct Classification   : %f%%\n', 100*(1-c));
fprintf('Percentage Incorrect Classification : %f%%\n', 100*c);
Percentage Correct Classification   : 100.000000%
Percentage Incorrect Classification : 0.000000%

Моделирование модели с использованием типов половинной точности

Чтобы смоделировать модель с половинной точностью, переопределите numerictype объекты и задайте для них тип данных 'half'. Моделирование модели.

floatType = numerictype('half');
activationType = numerictype('single');
sim(model);

В этом примере отсутствует потеря точности при использовании типа данных половинной точности. Моделирование с половинной точностью также приводит к 100% точности классификации.

[c, ~] = confusion(ttestsubset(:,1:testSetMaxIdx), ytest.Data(2:testSetMaxIdx+1,:)');
fprintf('Running Simulation with half precision :\n');
fprintf('Percentage Correct Classification   : %f%%\n', 100*(1-c));
fprintf('Percentage Incorrect Classification : %f%%\n', 100*c);
Running Simulation with half precision :
Percentage Correct Classification   : 100.000000%
Percentage Incorrect Classification : 0.000000%