From c55e48b61b8e620c272eb77ae68fe8e3fb3ef7fd Mon Sep 17 00:00:00 2001 From: dkk0918 <13262679180@163.com> Date: Tue, 7 Sep 2021 11:02:26 +0800 Subject: [PATCH] add onnx pack --- components/ai/onnx/README.md | 2 +- .../onnx/examples/mnist_float/mnist_float.h | 41 ------ components/ai/onnx/examples/mnist_int/mnist.c | 39 +----- .../ai/onnx/operator_float/mnist_float.c | 125 ------------------ .../ai/onnx/operator_float/mnist_float.h | 48 ------- components/ai/onnx/pic/mnist_test.png | Bin 0 -> 39940 bytes 6 files changed, 3 insertions(+), 252 deletions(-) delete mode 100644 components/ai/onnx/examples/mnist_float/mnist_float.h delete mode 100644 components/ai/onnx/operator_float/mnist_float.c delete mode 100644 components/ai/onnx/operator_float/mnist_float.h create mode 100644 components/ai/onnx/pic/mnist_test.png diff --git a/components/ai/onnx/README.md b/components/ai/onnx/README.md index 7c574824..39103ea7 100644 --- a/components/ai/onnx/README.md +++ b/components/ai/onnx/README.md @@ -65,7 +65,7 @@ _________________________________________________________________ ``` 推理测试 -![mnist_test](../../../pic/mnist_test.png) +![mnist_test](pic/mnist_test.png) diff --git a/components/ai/onnx/examples/mnist_float/mnist_float.h b/components/ai/onnx/examples/mnist_float/mnist_float.h deleted file mode 100644 index 3c6d20b0..00000000 --- a/components/ai/onnx/examples/mnist_float/mnist_float.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef __MNIST_H__ -#define __MNIST_H__ - -#include -#include - -#define IMG0 {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3803922, 0.37647063, 0.3019608, 0.46274513, 0.2392157, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3529412, 0.5411765, 0.9215687, 0.9215687, 0.9215687, 0.9215687, 0.9215687, 0.9215687, 0.9843138, 0.9843138, 0.9725491, 0.9960785, 0.9607844, 0.9215687, 0.74509805, 0.08235294, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.54901963, 0.9843138, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.7411765, 0.09019608, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8862746, 0.9960785, 0.81568635, 0.7803922, 0.7803922, 0.7803922, 0.7803922, 0.54509807, 0.2392157, 0.2392157, 0.2392157, 0.2392157, 0.2392157, 0.5019608, 0.8705883, 0.9960785, 0.9960785, 0.7411765, 0.08235294, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.14901961, 0.32156864, 0.050980397, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.13333334, 0.8352942, 0.9960785, 0.9960785, 0.45098042, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.32941177, 0.9960785, 0.9960785, 0.9176471, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.32941177, 0.9960785, 0.9960785, 0.9176471, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4156863, 0.6156863, 0.9960785, 0.9960785, 0.95294124, 0.20000002, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.098039225, 0.45882356, 0.8941177, 0.8941177, 0.8941177, 0.9921569, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.94117653, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.26666668, 0.4666667, 0.86274517, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.5568628, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.14509805, 0.73333335, 0.9921569, 0.9960785, 0.9960785, 0.9960785, 0.8745099, 0.8078432, 0.8078432, 0.29411766, 0.26666668, 0.8431373, 0.9960785, 0.9960785, 0.45882356, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4431373, 0.8588236, 0.9960785, 0.9490197, 0.89019614, 0.45098042, 0.34901962, 0.121568635, 0.0, 0.0, 0.0, 0.0, 0.7843138, 0.9960785, 0.9450981, 0.16078432, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6627451, 0.9960785, 0.6901961, 0.24313727, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.18823531, 0.9058824, 0.9960785, 0.9176471, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.07058824, 0.48627454, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.32941177, 0.9960785, 0.9960785, 0.6509804, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.54509807, 0.9960785, 0.9333334, 0.22352943, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8235295, 0.9803922, 0.9960785, 0.65882355, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9490197, 0.9960785, 0.93725497, 0.22352943, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.34901962, 0.9843138, 0.9450981, 0.3372549, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.019607844, 0.8078432, 0.96470594, 0.6156863, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.015686275, 0.45882356, 0.27058825, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0} -#define IMG0_LABEL 7 - -#define IMG1 {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.121568635, 0.5176471, 0.9960785, 0.9921569, 0.9960785, 0.8352942, 0.32156864, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.08235294, 0.5568628, 0.91372555, 0.98823535, 0.9921569, 0.98823535, 0.9921569, 0.98823535, 0.8745099, 0.078431375, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.48235297, 0.9960785, 0.9921569, 0.9960785, 0.9921569, 0.87843144, 0.7960785, 0.7960785, 0.8745099, 1.0, 0.8352942, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7960785, 0.9921569, 0.98823535, 0.9921569, 0.8313726, 0.078431375, 0.0, 0.0, 0.2392157, 0.9921569, 0.98823535, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.16078432, 0.95294124, 0.87843144, 0.7960785, 0.7176471, 0.16078432, 0.59607846, 0.11764707, 0.0, 0.0, 1.0, 0.9921569, 0.40000004, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.15686275, 0.078431375, 0.0, 0.0, 0.40000004, 0.9921569, 0.19607845, 0.0, 0.32156864, 0.9921569, 0.98823535, 0.078431375, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.32156864, 0.83921576, 0.121568635, 0.4431373, 0.91372555, 0.9960785, 0.91372555, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.24313727, 0.40000004, 0.32156864, 0.16078432, 0.9921569, 0.909804, 0.9921569, 0.98823535, 0.91372555, 0.19607845, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.59607846, 0.9921569, 0.9960785, 0.9921569, 0.9960785, 0.9921569, 0.9960785, 0.91372555, 0.48235297, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.59607846, 0.98823535, 0.9921569, 0.98823535, 0.9921569, 0.98823535, 0.75294125, 0.19607845, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.24313727, 0.7176471, 0.7960785, 0.95294124, 0.9960785, 0.9921569, 0.24313727, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.15686275, 0.6745098, 0.98823535, 0.7960785, 0.078431375, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.08235294, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7176471, 0.9960785, 0.43921572, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.24313727, 0.7960785, 0.6392157, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2392157, 0.9921569, 0.5921569, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.08235294, 0.83921576, 0.75294125, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.043137256, 0.8352942, 0.9960785, 0.5921569, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.40000004, 0.9921569, 0.5921569, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.16078432, 0.8352942, 0.98823535, 0.9921569, 0.43529415, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.16078432, 1.0, 0.8352942, 0.36078432, 0.20000002, 0.0, 0.0, 0.121568635, 0.36078432, 0.6784314, 0.9921569, 0.9960785, 0.9921569, 0.5568628, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6745098, 0.98823535, 0.9921569, 0.98823535, 0.7960785, 0.7960785, 0.91372555, 0.98823535, 0.9921569, 0.98823535, 0.9921569, 0.50980395, 0.078431375, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.08235294, 0.7960785, 1.0, 0.9921569, 0.9960785, 0.9921569, 0.9960785, 0.9921569, 0.9568628, 0.7960785, 0.32156864, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.078431375, 0.5921569, 0.5921569, 0.9921569, 0.67058825, 0.5921569, 0.5921569, 0.15686275, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0} -#define IMG1_LABEL 3 - -#define TOTAL_IMAGE 2 - - -static const signed char label[] = {IMG0_LABEL, IMG1_LABEL}; - -static const float W3[] = {-0.3233681, -0.4261553, -0.6519891, 0.79061985, -0.2210753, 0.037107922, 0.3984157, 0.22128074, 0.7975414, 0.2549885, 0.3076058, 0.62500215, -0.58958095, 0.20375429, -0.06477713, -1.566038, -0.37670124, -0.6443057}; -static const float B3[] = {-0.829373, -0.14096421}; - -static const float W2[] = {0.0070440695, 0.23192555, 0.036849476, -0.14687373, -0.15593372, 0.0044246824, 0.27322513, -0.027562773, 0.23404223, -0.6354651, -0.55645454, -0.77057034, 0.15603222, 0.71015775, 0.23954256, 1.8201442, -0.018377468, 1.5745461, 1.7230825, -0.59662616, 1.3997843, 0.33511618, 0.56846994, 0.3797911, 0.035079807, -0.18287429, -0.032232445, 0.006910181, -0.0026898328, -0.0057844054, 0.29354542, 0.13796881, 0.3558416, 0.0022847173, 0.0025906325, -0.022641085}; -static const float B2[] = {-0.11655525, -0.0036503011}; - -static const float W1[] = {0.15791991, -0.22649878, 0.021204736, 0.025593571, 0.008755621, -0.775102, -0.41594088, -0.12580238, -0.3963741, 0.33545518, -0.631953, -0.028754484, -0.50668705, -0.3574023, -3.7807872, -0.8261617, 0.102246165, 0.571127, -0.6256297, 0.06698781, 0.55969477, 0.25374785, -3.075965, -0.6959133, 0.2531965, 0.31739804, -0.8664238, 0.12750633, 0.83136076, 0.2666574, -2.5865922, -0.572031, 0.29743987, 0.16238026, -0.99154145, 0.077973805, 0.8913329, 0.16854058, -2.5247803, -0.5639109, 0.41671264, -0.10801031, -1.0229865, 0.2062031, 0.39889312, -0.16026731, -1.9185526, -0.48375717, 0.057339806, -1.2573057, -0.23117211, 1.051854, -0.7981992, -1.6263007, -0.26003376, -0.07649365, -0.4646075, 0.755821, 0.13187818, 0.24743222, -1.5276812, 0.1636555, -0.075465426, -0.058517877, -0.33852127, 1.3052516, 0.14443535, 0.44080895, -0.31031442, 0.15416017, 0.0053661224, -0.03175326, -0.15991405, 0.66121936, 0.0832211, 0.2651985, -0.038445678, 0.18054117, -0.0073251156, 0.054193687, -0.014296916, 0.30657783, 0.006181963, 0.22319937, 0.030315898, 0.12695274, -0.028179673, 0.11189027, 0.035358384, 0.046855893, -0.026528472, 0.26450494, 0.069981076, 0.107152134, -0.030371506, 0.09524366, 0.24802336, -0.36496836, -0.102762334, 0.49609017, 0.04002767, 0.020934932, -0.054773595, 0.05412083, -0.071876526, -1.5381132, -0.2356421, 1.5890793, -0.023087852, -0.24933836, 0.018771818, 0.08040064, 0.051946845, 0.6141782, 0.15780787, 0.12887044, -0.8691056, 1.3761537, 0.43058, 0.13476849, -0.14973496, 0.4542634, 0.13077497, 0.23117822, 0.003657386, 0.42742714, 0.23396699, 0.09209521, -0.060258932, 0.4642852, 0.10395402, 0.25047097, -0.05326261, 0.21466804, 0.11694269, 0.22402634, 0.12639907, 0.23495848, 0.12770525, 0.3324459, 0.0140223345, 0.106348366, 0.10877733, 0.30522102, 0.31412345, -0.07164018, 0.13483422, 0.45414954, 0.054698735, 0.07451815, 0.097312905, 0.27480683, 0.4866108, -0.43636885, -0.13586079, 0.5724732, 0.13595985, -0.0074526076, 0.11859829, 0.24481037, -0.37537888, -0.46877658, -0.5648533, 0.86578417, 0.3407381, -0.17214134, 0.040683553, 0.3630519, 0.089548275, -0.4989473, 0.47688767, 0.021731026, 0.2856471, 0.6174715, 0.7059148, -0.30635756, -0.5705427, -0.20692639, 0.041900065, 0.23040071, -0.1790487, -0.023751246, 0.14114629, 0.02345284, -0.64177734, -0.069909826, -0.08587972, 0.16460821, -0.53466517, -0.10163383, -0.13119817, 0.14908728, -0.63503706, -0.098961875, -0.23248474, 0.15406314, -0.48586813, -0.1904713, -0.20466608, 0.10629631, -0.5291871, -0.17358926, -0.36273107, 0.12225631, -0.38659447, -0.24787207, -0.25225234, 0.102635615, -0.14507034, -0.10110793, 0.043757595, -0.17158166, -0.031343404, -0.30139172, -0.09401665, 0.06986169, -0.54915506, 0.66843456, 0.14574362, -0.737502, 0.7700305, -0.4125441, 0.10115133, 0.05281194, 0.25467375, 0.22757779, -0.030224197, -0.0832025, -0.66385627, 0.51225215, -0.121023245, -0.3340579, -0.07505331, -0.09820366, -0.016041134, -0.03187605, -0.43589246, 0.094394326, -0.04983066, -0.0777906, -0.12822862, -0.089667186, -0.07014707, -0.010794195, -0.29095307, -0.01319235, -0.039757702, -0.023403417, -0.15530063, -0.052093383, -0.1477549, -0.07557954, -0.2686017, -0.035220042, -0.095615104, -0.015471024, -0.03906604, 0.024237331, -0.19604297, -0.19998372, -0.20302829, -0.04267139, -0.18774728, -0.045169186, -0.010131819, 0.14829905, -0.117015064, -0.4180649, -0.20680964, -0.024034742, -0.15787442, -0.055698488, -0.09037726, 0.40253848, -0.35745984, -0.786149, -0.0799551, 0.16205557, -0.14461482, -0.2749642, 0.2683253, 0.6881363, -0.064145364, 0.11361358, 0.59981894, 1.2947721, -1.2500908, 0.6082035, 0.12344158, 0.15808935, -0.17505693, 0.03425684, 0.39107767, 0.23190938, -0.7568858, 0.20042256, 0.079169095, 0.014275463, -0.12135842, 0.008516737, 0.26897284, 0.05706199, -0.52615446, 0.12489152, 0.08065737, -0.038548164, -0.08894516, 7.250979E-4, 0.28635752, -0.010820533, -0.39301336, 0.11144395, 0.06563818, -0.033744805, -0.07450528, -0.027328406, 0.3002447, 0.0029921278, -0.47954947, -0.04527057, -0.010289918, 0.039380465, -0.09236952, -0.1924659, 0.15401903, 0.21237805, -0.38984418, -0.37384143, -0.20648403, 0.29201767, -0.1299253, -0.36048025, -0.5544466, 0.45723814, -0.35266167, -0.94797707, -1.2481197, 0.88701195, 0.33620682, 0.0035414647, -0.22769359, 1.4563162, 0.54950374, 0.38396382, -0.41196275, 0.3758704, 0.17687413, 0.038129736, 0.16358295, 0.70515764, 0.055063568, 0.6445265, -0.2072113, 0.14618243, 0.10311305, 0.1971523, 0.174206, 0.36578146, -0.09782787, 0.5229244, -0.18459272, -0.0013945608, 0.08863555, 0.24184574, 0.15541393, 0.1722381, -0.10531331, 0.38215113, -0.30659106, -0.16298945, 0.11549875, 0.30750987, 0.1586183, -0.017728966, -0.050216004, 0.26232007, -1.2994286, -0.22700997, 0.108534105, 0.7447398, -0.39803517, 0.016863048, 0.10067235, -0.16355589, -0.64953077, -0.5674107, 0.017935256, 0.98968256, -1.395801, 0.44127485, 0.16644385, -0.19195901}; -static const float B1[] = {1.2019119, -1.1770505, 2.1698284, -1.9615222}; - -static const float W[] = {0.55808353, 0.78707385, -0.040990848, -0.122510895, -0.41261443, -0.036044, 0.1691557, -0.14711425, -0.016407091, -0.28058195, 0.018765535, 0.062936015, 0.49562064, 0.33931744, -0.47547337, -0.1405672, -0.88271654, 0.18359914, 0.020887045, -0.13782434, -0.052250575, 0.67922074, -0.28022966, -0.31278887, 0.44416663, -0.26106882, -0.32219923, 1.0321393, -0.1444394, 0.5221766, 0.057590708, -0.96547794, -0.3051688, 0.16859075, -0.5320585, 0.42684716, -0.5434046, 0.014693736, 0.26795483, 0.15921915}; -static const float B[] = {0.041442648, 1.461427, 0.07154641, -1.2774754, 0.80927604, -1.6933714, -0.29740578, -0.11774022, 0.3292682, 0.6596958}; - - - - - -// ASCII lib from (https://www.jianshu.com/p/1f58a0ebf5d9) - - - - -int mnist(void); - -#endif //__MNIST_H__ diff --git a/components/ai/onnx/examples/mnist_int/mnist.c b/components/ai/onnx/examples/mnist_int/mnist.c index 3a8a9c51..05f521bf 100644 --- a/components/ai/onnx/examples/mnist_int/mnist.c +++ b/components/ai/onnx/examples/mnist_int/mnist.c @@ -1,29 +1,20 @@ -//#include "tos_k.h" #include #include -//#include -//#include -//#include - -//#include "mnist.h" #include "mnist_int.h" #include "onnx.h" static const char codeLib[] = "@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\"^`'. "; int data[5]={1.5 , 2.5 , 3.5 , 4.5 , 5.5}; -//static const int img[2][784] = {IMG0, IMG1}; static const int img[2][784] = {IMG0, IMG1}; -//static const int imgint[2][784] = {IMG0_INT, IMG1_INT}; static const int img1[784] = {1,2,3,4,5}; int hello() { - printf("hello\r\n"); + printf("hello pnnx\r\n"); return 0; } -//void print_img(void) void print_img(void * buf) { int index = 0; @@ -39,27 +30,18 @@ void print_img(void * buf) { index = 0; - //if(img[0][y*28+x] > 600) if(((int*)buf)[y*28+x] > 600) - //if(data[0] > 0.6) { - index =69; - //ch = ' '; + index =69; } if(index < 0) { index = 0; - //ch = ' '; } printf("%c",codeLib[index]); printf("%c",codeLib[index]); - - - //printf("%c",ch); - //printf("%c",ch); - } printf("\r\n"); } @@ -69,14 +51,6 @@ int mnist() { printf("test1\r\n"); int img_index = 1; - /* - if(argc == 2) - { - img_index = atoi(argv[1]); - } - */ - - //print_img(); print_img(img[img_index]); printf("img ok\r\n"); @@ -185,14 +159,6 @@ int mnist() softmax(dense2, 10, output); printf("Softmax ok\r\n"); - - // 10. Result - /* - printf("\n\rdense2: \n\r"); - for(int i = 0; i < 10; i++) - printf("%d ", dense2[i]); - */ - int max = 0; int min = output[0]; @@ -223,4 +189,3 @@ int mnist() return 0; } -//MSH_CMD_EXPORT(mnist, mnist simple example) diff --git a/components/ai/onnx/operator_float/mnist_float.c b/components/ai/onnx/operator_float/mnist_float.c deleted file mode 100644 index 5ba6a2ff..00000000 --- a/components/ai/onnx/operator_float/mnist_float.c +++ /dev/null @@ -1,125 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "mnist.h" -#include "onnx.h" - -int mnist(int argc, char const *argv[]) -{ - int img_index = 0; - if(argc == 2) - { - img_index = atoi(argv[1]); - } - print_img(img[img_index]); - - // 1. Conv2D - int64_t shapeW3[] = {2, 1, 3, 3}; - int64_t dimW3 = 4; - int64_t permW3_t[] = { 0, 2, 3, 1}; - float* W3_t = transpose(W3, shapeW3, dimW3, permW3_t); - - float* conv1 = (float*) malloc(sizeof(float)*28*28*2); - memset(conv1, 0, sizeof(sizeof(float)*28*28*2)); - conv2D(img[img_index], 28, 28, 1, W3, 2, 3, 3, 1, 1, 1, 1, B3, conv1, 28, 28); - - free(W3_t); - - // 2. Relu - float* relu1 = (float*) malloc(sizeof(float)*28*28*2); - relu(conv1, 28*28*2, relu1); - - free(conv1); - - // 3. Maxpool - float* maxpool1 = (float*) malloc(sizeof(float)*14*14*2); - memset(maxpool1, 0, sizeof(sizeof(float)*14*14*2)); - maxpool(relu1, 28, 28, 2, 2, 2, 0, 0, 2, 2, 14, 14, maxpool1); - - free(relu1); - - // 4. Conv2D - int64_t shapeW2[] = {2, 2, 3, 3}; - int64_t dimW2 = 4; - int64_t perm_t[] = { 0, 2, 3, 1}; - float* W2_t = transpose(W2, shapeW2, dimW2, perm_t); - - float* conv2 = (float*) malloc(sizeof(float)*14*14*2); - memset(conv2, 0, sizeof(sizeof(float)*14*14*2)); - conv2D(maxpool1, 14, 14, 2, W2_t, 2, 3, 3, 1, 1, 1, 1, B2, conv2, 14, 14); - - free(W2_t); - free(maxpool1); - - // 5. Relu - float* relu2 = (float*) malloc(sizeof(float)*14*14*2); - relu(conv2, 14*14*2, relu2); - - free(conv2); - - // 6. Maxpool - float* maxpool2 = (float*) malloc(sizeof(float)*7*7*2); - memset(maxpool2, 0, sizeof(sizeof(float)*7*7*2)); - maxpool(relu2, 14, 14, 2, 2, 2, 0, 0, 2, 2, 7, 7, maxpool2); - - free(relu2); - - // Flatten NOT REQUIRED - - // 7. Dense - int64_t shapeW1[] = {98, 4}; - int64_t dimW1 = 2; - int64_t permW1_t[] = { 1, 0}; - float* W1_t = transpose(W1, shapeW1, dimW1, permW1_t); - - float* dense1 = (float*) malloc(sizeof(float)*4); - memset(dense1, 0, sizeof(sizeof(float)*4)); - dense(maxpool2, W1_t, 98, 4, B1, dense1); - - free(W1_t); - free(maxpool2); - - // 8. Dense - int64_t shapeW[] = {4, 10}; - int64_t dimW = 2; - int64_t permW_t[] = { 1, 0}; - float* W_t = transpose(W, shapeW, dimW, permW_t); - - float* dense2 = (float*) malloc(sizeof(float)*10); - memset(dense2, 0, sizeof(sizeof(float)*10)); - dense(dense1, W_t, 4, 10, B, dense2); - - free(W_t); - free(dense1); - - // 9. Softmax - float* output = (float*) malloc(sizeof(float)*10); - memset(output, 0, sizeof(sizeof(float)*10)); - softmax(dense2, 10, output); - - // 10. Result - float max = 0; - int max_index = 0; - printf("\nPredictions: \n"); - for(int i = 0; i < 10; i++) - { - printf("%f ", output[i]); - if(output[i] > max) - { - max = output[i]; - max_index = i; - } - } - printf("\n"); - printf("\nThe number is %d\n", max_index); - - free(dense2); - free(output); - - return 0; -} -MSH_CMD_EXPORT(mnist, mnist simple example) diff --git a/components/ai/onnx/operator_float/mnist_float.h b/components/ai/onnx/operator_float/mnist_float.h deleted file mode 100644 index f5f57d90..00000000 --- a/components/ai/onnx/operator_float/mnist_float.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef __MNIST_H__ -#define __MNIST_H__ - -#include -#include - -#define IMG0 {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3803922, 0.37647063, 0.3019608, 0.46274513, 0.2392157, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3529412, 0.5411765, 0.9215687, 0.9215687, 0.9215687, 0.9215687, 0.9215687, 0.9215687, 0.9843138, 0.9843138, 0.9725491, 0.9960785, 0.9607844, 0.9215687, 0.74509805, 0.08235294, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.54901963, 0.9843138, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.7411765, 0.09019608, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8862746, 0.9960785, 0.81568635, 0.7803922, 0.7803922, 0.7803922, 0.7803922, 0.54509807, 0.2392157, 0.2392157, 0.2392157, 0.2392157, 0.2392157, 0.5019608, 0.8705883, 0.9960785, 0.9960785, 0.7411765, 0.08235294, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.14901961, 0.32156864, 0.050980397, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.13333334, 0.8352942, 0.9960785, 0.9960785, 0.45098042, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.32941177, 0.9960785, 0.9960785, 0.9176471, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.32941177, 0.9960785, 0.9960785, 0.9176471, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4156863, 0.6156863, 0.9960785, 0.9960785, 0.95294124, 0.20000002, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.098039225, 0.45882356, 0.8941177, 0.8941177, 0.8941177, 0.9921569, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.94117653, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.26666668, 0.4666667, 0.86274517, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.9960785, 0.5568628, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.14509805, 0.73333335, 0.9921569, 0.9960785, 0.9960785, 0.9960785, 0.8745099, 0.8078432, 0.8078432, 0.29411766, 0.26666668, 0.8431373, 0.9960785, 0.9960785, 0.45882356, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4431373, 0.8588236, 0.9960785, 0.9490197, 0.89019614, 0.45098042, 0.34901962, 0.121568635, 0.0, 0.0, 0.0, 0.0, 0.7843138, 0.9960785, 0.9450981, 0.16078432, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6627451, 0.9960785, 0.6901961, 0.24313727, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.18823531, 0.9058824, 0.9960785, 0.9176471, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.07058824, 0.48627454, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.32941177, 0.9960785, 0.9960785, 0.6509804, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.54509807, 0.9960785, 0.9333334, 0.22352943, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8235295, 0.9803922, 0.9960785, 0.65882355, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9490197, 0.9960785, 0.93725497, 0.22352943, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.34901962, 0.9843138, 0.9450981, 0.3372549, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.019607844, 0.8078432, 0.96470594, 0.6156863, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.015686275, 0.45882356, 0.27058825, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0} -#define IMG0_LABEL 7 - -#define IMG1 {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.121568635, 0.5176471, 0.9960785, 0.9921569, 0.9960785, 0.8352942, 0.32156864, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.08235294, 0.5568628, 0.91372555, 0.98823535, 0.9921569, 0.98823535, 0.9921569, 0.98823535, 0.8745099, 0.078431375, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.48235297, 0.9960785, 0.9921569, 0.9960785, 0.9921569, 0.87843144, 0.7960785, 0.7960785, 0.8745099, 1.0, 0.8352942, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7960785, 0.9921569, 0.98823535, 0.9921569, 0.8313726, 0.078431375, 0.0, 0.0, 0.2392157, 0.9921569, 0.98823535, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.16078432, 0.95294124, 0.87843144, 0.7960785, 0.7176471, 0.16078432, 0.59607846, 0.11764707, 0.0, 0.0, 1.0, 0.9921569, 0.40000004, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.15686275, 0.078431375, 0.0, 0.0, 0.40000004, 0.9921569, 0.19607845, 0.0, 0.32156864, 0.9921569, 0.98823535, 0.078431375, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.32156864, 0.83921576, 0.121568635, 0.4431373, 0.91372555, 0.9960785, 0.91372555, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.24313727, 0.40000004, 0.32156864, 0.16078432, 0.9921569, 0.909804, 0.9921569, 0.98823535, 0.91372555, 0.19607845, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.59607846, 0.9921569, 0.9960785, 0.9921569, 0.9960785, 0.9921569, 0.9960785, 0.91372555, 0.48235297, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.59607846, 0.98823535, 0.9921569, 0.98823535, 0.9921569, 0.98823535, 0.75294125, 0.19607845, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.24313727, 0.7176471, 0.7960785, 0.95294124, 0.9960785, 0.9921569, 0.24313727, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.15686275, 0.6745098, 0.98823535, 0.7960785, 0.078431375, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.08235294, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7176471, 0.9960785, 0.43921572, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.24313727, 0.7960785, 0.6392157, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2392157, 0.9921569, 0.5921569, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.08235294, 0.83921576, 0.75294125, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.043137256, 0.8352942, 0.9960785, 0.5921569, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.40000004, 0.9921569, 0.5921569, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.16078432, 0.8352942, 0.98823535, 0.9921569, 0.43529415, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.16078432, 1.0, 0.8352942, 0.36078432, 0.20000002, 0.0, 0.0, 0.121568635, 0.36078432, 0.6784314, 0.9921569, 0.9960785, 0.9921569, 0.5568628, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6745098, 0.98823535, 0.9921569, 0.98823535, 0.7960785, 0.7960785, 0.91372555, 0.98823535, 0.9921569, 0.98823535, 0.9921569, 0.50980395, 0.078431375, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.08235294, 0.7960785, 1.0, 0.9921569, 0.9960785, 0.9921569, 0.9960785, 0.9921569, 0.9568628, 0.7960785, 0.32156864, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.078431375, 0.5921569, 0.5921569, 0.9921569, 0.67058825, 0.5921569, 0.5921569, 0.15686275, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0} -#define IMG1_LABEL 3 - -#define TOTAL_IMAGE 2 - -static const float img[][784] = {IMG0, IMG1}; -static const signed char label[] = {IMG0_LABEL, IMG1_LABEL}; - -static const float W3[] = {-0.3233681, -0.4261553, -0.6519891, 0.79061985, -0.2210753, 0.037107922, 0.3984157, 0.22128074, 0.7975414, 0.2549885, 0.3076058, 0.62500215, -0.58958095, 0.20375429, -0.06477713, -1.566038, -0.37670124, -0.6443057}; -static const float B3[] = {-0.829373, -0.14096421}; - -static const float W2[] = {0.0070440695, 0.23192555, 0.036849476, -0.14687373, -0.15593372, 0.0044246824, 0.27322513, -0.027562773, 0.23404223, -0.6354651, -0.55645454, -0.77057034, 0.15603222, 0.71015775, 0.23954256, 1.8201442, -0.018377468, 1.5745461, 1.7230825, -0.59662616, 1.3997843, 0.33511618, 0.56846994, 0.3797911, 0.035079807, -0.18287429, -0.032232445, 0.006910181, -0.0026898328, -0.0057844054, 0.29354542, 0.13796881, 0.3558416, 0.0022847173, 0.0025906325, -0.022641085}; -static const float B2[] = {-0.11655525, -0.0036503011}; - -static const float W1[] = {0.15791991, -0.22649878, 0.021204736, 0.025593571, 0.008755621, -0.775102, -0.41594088, -0.12580238, -0.3963741, 0.33545518, -0.631953, -0.028754484, -0.50668705, -0.3574023, -3.7807872, -0.8261617, 0.102246165, 0.571127, -0.6256297, 0.06698781, 0.55969477, 0.25374785, -3.075965, -0.6959133, 0.2531965, 0.31739804, -0.8664238, 0.12750633, 0.83136076, 0.2666574, -2.5865922, -0.572031, 0.29743987, 0.16238026, -0.99154145, 0.077973805, 0.8913329, 0.16854058, -2.5247803, -0.5639109, 0.41671264, -0.10801031, -1.0229865, 0.2062031, 0.39889312, -0.16026731, -1.9185526, -0.48375717, 0.057339806, -1.2573057, -0.23117211, 1.051854, -0.7981992, -1.6263007, -0.26003376, -0.07649365, -0.4646075, 0.755821, 0.13187818, 0.24743222, -1.5276812, 0.1636555, -0.075465426, -0.058517877, -0.33852127, 1.3052516, 0.14443535, 0.44080895, -0.31031442, 0.15416017, 0.0053661224, -0.03175326, -0.15991405, 0.66121936, 0.0832211, 0.2651985, -0.038445678, 0.18054117, -0.0073251156, 0.054193687, -0.014296916, 0.30657783, 0.006181963, 0.22319937, 0.030315898, 0.12695274, -0.028179673, 0.11189027, 0.035358384, 0.046855893, -0.026528472, 0.26450494, 0.069981076, 0.107152134, -0.030371506, 0.09524366, 0.24802336, -0.36496836, -0.102762334, 0.49609017, 0.04002767, 0.020934932, -0.054773595, 0.05412083, -0.071876526, -1.5381132, -0.2356421, 1.5890793, -0.023087852, -0.24933836, 0.018771818, 0.08040064, 0.051946845, 0.6141782, 0.15780787, 0.12887044, -0.8691056, 1.3761537, 0.43058, 0.13476849, -0.14973496, 0.4542634, 0.13077497, 0.23117822, 0.003657386, 0.42742714, 0.23396699, 0.09209521, -0.060258932, 0.4642852, 0.10395402, 0.25047097, -0.05326261, 0.21466804, 0.11694269, 0.22402634, 0.12639907, 0.23495848, 0.12770525, 0.3324459, 0.0140223345, 0.106348366, 0.10877733, 0.30522102, 0.31412345, -0.07164018, 0.13483422, 0.45414954, 0.054698735, 0.07451815, 0.097312905, 0.27480683, 0.4866108, -0.43636885, -0.13586079, 0.5724732, 0.13595985, -0.0074526076, 0.11859829, 0.24481037, -0.37537888, -0.46877658, -0.5648533, 0.86578417, 0.3407381, -0.17214134, 0.040683553, 0.3630519, 0.089548275, -0.4989473, 0.47688767, 0.021731026, 0.2856471, 0.6174715, 0.7059148, -0.30635756, -0.5705427, -0.20692639, 0.041900065, 0.23040071, -0.1790487, -0.023751246, 0.14114629, 0.02345284, -0.64177734, -0.069909826, -0.08587972, 0.16460821, -0.53466517, -0.10163383, -0.13119817, 0.14908728, -0.63503706, -0.098961875, -0.23248474, 0.15406314, -0.48586813, -0.1904713, -0.20466608, 0.10629631, -0.5291871, -0.17358926, -0.36273107, 0.12225631, -0.38659447, -0.24787207, -0.25225234, 0.102635615, -0.14507034, -0.10110793, 0.043757595, -0.17158166, -0.031343404, -0.30139172, -0.09401665, 0.06986169, -0.54915506, 0.66843456, 0.14574362, -0.737502, 0.7700305, -0.4125441, 0.10115133, 0.05281194, 0.25467375, 0.22757779, -0.030224197, -0.0832025, -0.66385627, 0.51225215, -0.121023245, -0.3340579, -0.07505331, -0.09820366, -0.016041134, -0.03187605, -0.43589246, 0.094394326, -0.04983066, -0.0777906, -0.12822862, -0.089667186, -0.07014707, -0.010794195, -0.29095307, -0.01319235, -0.039757702, -0.023403417, -0.15530063, -0.052093383, -0.1477549, -0.07557954, -0.2686017, -0.035220042, -0.095615104, -0.015471024, -0.03906604, 0.024237331, -0.19604297, -0.19998372, -0.20302829, -0.04267139, -0.18774728, -0.045169186, -0.010131819, 0.14829905, -0.117015064, -0.4180649, -0.20680964, -0.024034742, -0.15787442, -0.055698488, -0.09037726, 0.40253848, -0.35745984, -0.786149, -0.0799551, 0.16205557, -0.14461482, -0.2749642, 0.2683253, 0.6881363, -0.064145364, 0.11361358, 0.59981894, 1.2947721, -1.2500908, 0.6082035, 0.12344158, 0.15808935, -0.17505693, 0.03425684, 0.39107767, 0.23190938, -0.7568858, 0.20042256, 0.079169095, 0.014275463, -0.12135842, 0.008516737, 0.26897284, 0.05706199, -0.52615446, 0.12489152, 0.08065737, -0.038548164, -0.08894516, 7.250979E-4, 0.28635752, -0.010820533, -0.39301336, 0.11144395, 0.06563818, -0.033744805, -0.07450528, -0.027328406, 0.3002447, 0.0029921278, -0.47954947, -0.04527057, -0.010289918, 0.039380465, -0.09236952, -0.1924659, 0.15401903, 0.21237805, -0.38984418, -0.37384143, -0.20648403, 0.29201767, -0.1299253, -0.36048025, -0.5544466, 0.45723814, -0.35266167, -0.94797707, -1.2481197, 0.88701195, 0.33620682, 0.0035414647, -0.22769359, 1.4563162, 0.54950374, 0.38396382, -0.41196275, 0.3758704, 0.17687413, 0.038129736, 0.16358295, 0.70515764, 0.055063568, 0.6445265, -0.2072113, 0.14618243, 0.10311305, 0.1971523, 0.174206, 0.36578146, -0.09782787, 0.5229244, -0.18459272, -0.0013945608, 0.08863555, 0.24184574, 0.15541393, 0.1722381, -0.10531331, 0.38215113, -0.30659106, -0.16298945, 0.11549875, 0.30750987, 0.1586183, -0.017728966, -0.050216004, 0.26232007, -1.2994286, -0.22700997, 0.108534105, 0.7447398, -0.39803517, 0.016863048, 0.10067235, -0.16355589, -0.64953077, -0.5674107, 0.017935256, 0.98968256, -1.395801, 0.44127485, 0.16644385, -0.19195901}; -static const float B1[] = {1.2019119, -1.1770505, 2.1698284, -1.9615222}; - -static const float W[] = {0.55808353, 0.78707385, -0.040990848, -0.122510895, -0.41261443, -0.036044, 0.1691557, -0.14711425, -0.016407091, -0.28058195, 0.018765535, 0.062936015, 0.49562064, 0.33931744, -0.47547337, -0.1405672, -0.88271654, 0.18359914, 0.020887045, -0.13782434, -0.052250575, 0.67922074, -0.28022966, -0.31278887, 0.44416663, -0.26106882, -0.32219923, 1.0321393, -0.1444394, 0.5221766, 0.057590708, -0.96547794, -0.3051688, 0.16859075, -0.5320585, 0.42684716, -0.5434046, 0.014693736, 0.26795483, 0.15921915}; -static const float B[] = {0.041442648, 1.461427, 0.07154641, -1.2774754, 0.80927604, -1.6933714, -0.29740578, -0.11774022, 0.3292682, 0.6596958}; - -// ASCII lib from (https://www.jianshu.com/p/1f58a0ebf5d9) -static const char codeLib[] = "@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\"^`'. "; -static void print_img(const float * buf) -{ - for(int y = 0; y < 28; y++) - { - for (int x = 0; x < 28; x++) - { - int index = 0; - if(buf[y*28+x] > 0.6f) index =69; - if(index < 0) index = 0; - printf("%c",codeLib[index]); - printf("%c",codeLib[index]); - } - printf("\n"); - } -} - -#endif //__MNIST_H__ diff --git a/components/ai/onnx/pic/mnist_test.png b/components/ai/onnx/pic/mnist_test.png new file mode 100644 index 0000000000000000000000000000000000000000..8fe248bf46680a0c5f7ca23498c2360a88f83831 GIT binary patch literal 39940 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 z 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 literal 0 HcmV?d00001