В этом примере сравниваются результаты обученной модели классификации нейронных сетей в 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%