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