Part 7c: Validation#
We executed NN inference on the pynq-z2! Now we can copy the y_hw.npy
back to the host we’ve been using for the training and synthesis, and make a final plot to check that the output we took on the board is as expected.
The command to copy it back is
scp xilinx@192.168.2.99:~/jupyter_notebooks/y_hw.npy model_3/
import matplotlib.pyplot as plt
import numpy as np
import plotting
%matplotlib inline
from sklearn.metrics import accuracy_score
y_hw = np.load('model_3/y_hw.npy')
y_test = np.load('y_test.npy')
classes = np.load('classes.npy', allow_pickle=True)
y_hls = np.load('model_3/y_hls.npy')
y_qkeras = np.load('model_3/y_qkeras.npy')
print("Accuracy QKeras, CPU: {}".format(accuracy_score(np.argmax(y_test, axis=1), np.argmax(y_qkeras, axis=1))))
print("Accuracy hls4ml, CPU: {}".format(accuracy_score(np.argmax(y_test, axis=1), np.argmax(y_hls, axis=1))))
print("Accuracy hls4ml, pynq-z2: {}".format(accuracy_score(np.argmax(y_test, axis=1), np.argmax(y_hw, axis=1))))
fig, ax = plt.subplots(figsize=(9, 9))
_ = plotting.makeRoc(y_test, y_qkeras, classes, linestyle='-')
plt.gca().set_prop_cycle(None) # reset the colors
_ = plotting.makeRoc(y_test, y_hls, classes, linestyle='--')
plt.gca().set_prop_cycle(None) # reset the colors
_ = plotting.makeRoc(y_test, y_hw, classes, linestyle='-.')
from matplotlib.lines import Line2D
lines = [Line2D([0], [0], ls='-'), Line2D([0], [0], ls='--'), Line2D([0], [0], ls='-.')]
from matplotlib.legend import Legend
leg = Legend(ax, lines, labels=['QKeras, CPU', 'hls4ml, CPU', 'hls4ml, pynq-z2'], loc='lower right', frameon=False)
ax.add_artist(leg)
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
Cell In[1], line 8
5 get_ipython().run_line_magic('matplotlib', 'inline')
6 from sklearn.metrics import accuracy_score
----> 8 y_hw = np.load('model_3/y_hw.npy')
9 y_test = np.load('y_test.npy')
10 classes = np.load('classes.npy', allow_pickle=True)
File ~/miniconda3/envs/hls4ml-tutorial/lib/python3.10/site-packages/numpy/lib/npyio.py:427, in load(file, mmap_mode, allow_pickle, fix_imports, encoding, max_header_size)
425 own_fid = False
426 else:
--> 427 fid = stack.enter_context(open(os_fspath(file), "rb"))
428 own_fid = True
430 # Code to distinguish from NumPy binary files and pickles.
FileNotFoundError: [Errno 2] No such file or directory: 'model_3/y_hw.npy'