Digit Classification with Half-Precision Data Types
This example compares the results of a trained neural network classification model in Simulink® in double precision and half precision. The model classifies images from the MNIST handwritten digit dataset.
To begin, load the data for the model, and specify the size of the test data set.
loadtrainImage.mattestSetMaxIdx = 10;
Simulate the Model with Double-Precision Types
This model usesnumerictype
objects to specify parameter, signal, and block output data types. To simulate the model using double-precision data types, define thenumerictype
objects in the base workspace and set the data type of the objects to'double'
. Simulate the model.
floatType = numerictype('double'); activationType = numerictype('double'); model ='ex_imagerecog_half.slx';open_system(model); sim(model);
The double-precision simulation results in 100% classification accuracy.
[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%
Simulate the Model with Half-Precision Types
To simulate the model in half precision, redefine thenumerictype
objects and set their data type to'half'
. Simulate the model.
floatType = numerictype('half'); activationType = numerictype('single'); sim(model);
In this example, there is no loss of accuracy when using the half-precision data type. The half-precision simulation also results in 100% classification accuracy.
[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%