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