在FPGA/pure python上运行量化tensorflow模型
我有一个在keras中训练的模型,这是一个在MNIST数据集上训练的简单模型 我试图做的是重写这个模型并在FPGA设备上运行。 为了做到这一点,我想充分了解量化模型是如何工作的 首先,我使用训练后量化将该模型转换为.tflite格式和UINT8精度() 所以我有一个量化模型,准确率约为90% 现在,我尝试从量化模型中获取权重,并在纯python中实现它。我使用此工具进行可视化并获取模型权重: 虽然简单的python代码(矩阵乘法、add bias和relu)可以工作,但带有量化权重的代码不起作用 所以我的问题是如何使用numpy编写前馈 我在keras中的模型如下所示:在FPGA/pure python上运行量化tensorflow模型,python,tensorflow,deep-learning,tensorflow-lite,quantization,Python,Tensorflow,Deep Learning,Tensorflow Lite,Quantization,我有一个在keras中训练的模型,这是一个在MNIST数据集上训练的简单模型 我试图做的是重写这个模型并在FPGA设备上运行。 为了做到这一点,我想充分了解量化模型是如何工作的 首先,我使用训练后量化将该模型转换为.tflite格式和UINT8精度() 所以我有一个量化模型,准确率约为90% 现在,我尝试从量化模型中获取权重,并在纯python中实现它。我使用此工具进行可视化并获取模型权重: 虽然简单的python代码(矩阵乘法、add bias和relu)可以工作,但带有量化权重的代码不起作用
model = Sequential()
model.add(Dense(512, input_shape=input_shape))
model.add(Activation(tf.nn.relu))
model.add(Dense(100))
model.add(Activation(tf.nn.relu))
model.add(Dense(num_classes))
model.add(Activation(tf.nn.softmax))
model.compile(
optimizer=Adam(),
loss='categorical_crossentropy',
metrics=['accuracy'],
)
我用TocoConverter转换了它。它在tensorflow中工作
然后我尝试用纯python编写前馈:
for img, label in zip(x_test, y_test):
img = img.astype('uint8')
total_seen += 1
label = tf.keras.utils.to_categorical(label, num_classes=num_classes)
X = img.reshape(1, 784)
z1 = np.dot(X, W0.T) + b0
a1 = relu(z1)
z2 = np.dot(a1, W1.T) + b1
a2 = relu(z2)
z3 = np.dot(a2, W2.T) + b2
prediction = np.argmax(z3)
label = np.argmax(label)
if prediction == label:
num_correct += 1
但这个模型的准确率约为10%,所以出现了一些问题。
如何纠正这种模式
提前谢谢
编辑:
我读过一篇关于tensorflow中量化的论文:
我几乎什么都知道,我知道激活和内核的S和Z值是多少。但在矩阵相乘之后,它应该乘以因子:M:=S1*S2/S3。
我不知道什么是S3规模以及如何获得它。因为我在netron graph中看不到任何相关内容。有什么建议吗?您需要执行两个步骤:
您可以查看我在TFlite上的教程,在这里我介绍了概念和培训,并将要写下关于推断的内容。请添加您尝试的权重代码。更好的办法是添加一些简单的示例,这样人们就可以看到问题所在。您是否成功地在FPGA上实现了该模型?我正试图做同样的事情,但无法计算出正确的计算流程。