Skip to content

Commit b646155

Browse files
authored
New models (#7)
* Add a small QKeras CNN model trained on MNIST * Update the QKeras 3 layer jet tagging model, and add a config for it.
1 parent d4222da commit b646155

6 files changed

+125
-0
lines changed

config-files/qkeras_3layer_config.yml

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
Backend: Vivado
2+
ClockPeriod: 5
3+
HLSConfig:
4+
LayerName:
5+
fc1:
6+
Precision:
7+
bias: ap_fixed<6,1>
8+
weight: ap_fixed<6,1>
9+
ReuseFactor: 1
10+
Trace: true
11+
fc1_input:
12+
Precision:
13+
result: ap_fixed<16,6>
14+
Trace: true
15+
fc2:
16+
Precision:
17+
bias: ap_fixed<6,1>
18+
weight: ap_fixed<6,1>
19+
ReuseFactor: 1
20+
Trace: true
21+
fc3:
22+
Precision:
23+
bias: ap_fixed<6,1>
24+
weight: ap_fixed<6,1>
25+
ReuseFactor: 1
26+
Trace: true
27+
output:
28+
Precision:
29+
bias: ap_fixed<6,1>
30+
weight: ap_fixed<6,1>
31+
ReuseFactor: 1
32+
Trace: true
33+
relu1:
34+
Precision:
35+
result: ap_fixed<7,1,AP_RND_CONV,AP_SAT>
36+
ReuseFactor: 1
37+
Trace: true
38+
relu2:
39+
Precision:
40+
result: ap_fixed<7,1,AP_RND_CONV,AP_SAT>
41+
ReuseFactor: 1
42+
Trace: true
43+
relu3:
44+
Precision:
45+
result: ap_fixed<7,1,AP_RND_CONV,AP_SAT>
46+
ReuseFactor: 1
47+
Trace: true
48+
softmax:
49+
Precision: ap_fixed<16,6>
50+
ReuseFactor: 1
51+
Trace: true
52+
exp_table_t: ap_fixed<18,8>
53+
inv_table_t: ap_fixed<18,4>
54+
table_size: 1024
55+
Model:
56+
Precision: ap_fixed<16,6>
57+
ReuseFactor: 1
58+
Strategy: Latency
59+
IOType: io_parallel
60+
KerasH5: keras/qkeras_3layer_weights.h5
61+
KerasJson: keras/qkeras_3layer.json
62+
OutputDir: my-hls-test
63+
ProjectName: myproject
64+
XilinxPart: xcku115-flvb2104-2-i
+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
Backend: Vivado
2+
ClockPeriod: 5
3+
HLSConfig:
4+
LayerName:
5+
input_1:
6+
Precision:
7+
result: ap_fixed<16,6>
8+
Trace: true
9+
max_pooling2d:
10+
Precision: ap_fixed<16,6>
11+
Trace: true
12+
max_pooling2d_1:
13+
Precision: ap_fixed<16,6>
14+
Trace: true
15+
q_activation:
16+
Precision:
17+
result: ap_fixed<7,1,AP_RND,AP_SAT>
18+
ReuseFactor: 1
19+
Trace: true
20+
q_activation_1:
21+
Precision:
22+
result: ap_fixed<7,1,AP_RND,AP_SAT>
23+
ReuseFactor: 1
24+
Trace: true
25+
q_conv2d:
26+
Precision:
27+
bias: ap_fixed<6,1>
28+
weight: ap_fixed<6,1>
29+
ReuseFactor: 1
30+
Trace: true
31+
q_conv2d_1:
32+
Precision:
33+
bias: ap_fixed<6,1>
34+
weight: ap_fixed<6,1>
35+
ReuseFactor: 1
36+
Trace: true
37+
q_dense:
38+
Precision:
39+
bias: ap_fixed<6,1>
40+
weight: ap_fixed<6,1>
41+
ReuseFactor: 1
42+
Trace: true
43+
softmax:
44+
Precision: ap_fixed<16,6>
45+
ReuseFactor: 1
46+
Trace: true
47+
exp_table_t: ap_fixed<18,12,AP_RND,AP_SAT>
48+
inv_table_t: ap_fixed<18,4,AP_RND,AP_SAT>
49+
table_size: 1024
50+
Model:
51+
Precision: ap_fixed<16,6>
52+
ReuseFactor: 16
53+
Strategy: Latency
54+
IOType: io_stream
55+
KerasH5: keras/qkeras_mnist_cnn_weights.h5
56+
KerasJson: keras/qkeras_mnist_cnn.json
57+
OutputDir: my-hls-test
58+
ProjectName: myproject
59+
XilinxPart: xcku115-flvb2104-2-i

keras/qkeras_3layer.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": [null, 16], "dtype": "float32", "sparse": false, "ragged": false, "name": "fc1_input"}}, {"class_name": "QDense", "config": {"name": "fc1", "trainable": true, "batch_input_shape": [null, 16], "dtype": "float32", "units": 64, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "QInitializer", "config": {"initializer": {"class_name": "LecunUniform", "config": {"seed": null}, "__passive_serialization__": true}, "use_scale": true, "quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}, "__passive_serialization__": true}}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1", "config": {"l1": 9.999999747378752e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": {"class_name": "Clip", "config": {"min_value": -1, "max_value": 1}}, "bias_constraint": {"class_name": "Clip", "config": {"min_value": -1, "max_value": 1}}, "kernel_quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}}, "bias_quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}}, "kernel_range": null, "bias_range": null}}, {"class_name": "QActivation", "config": {"name": "relu1", "trainable": true, "dtype": "float32", "activation": {"class_name": "quantized_relu", "config": {"bits": 6, "integer": 0, "use_sigmoid": 0, "negative_slope": 0.0, "use_stochastic_rounding": false, "relu_upper_bound": null, "qnoise_factor": 1.0}, "__passive_serialization__": true}}}, {"class_name": "QDense", "config": {"name": "fc2", "trainable": true, "dtype": "float32", "units": 32, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "QInitializer", "config": {"initializer": {"class_name": "LecunUniform", "config": {"seed": null}, "__passive_serialization__": true}, "use_scale": true, "quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}, "__passive_serialization__": true}}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1", "config": {"l1": 9.999999747378752e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": {"class_name": "Clip", "config": {"min_value": -1, "max_value": 1}}, "bias_constraint": {"class_name": "Clip", "config": {"min_value": -1, "max_value": 1}}, "kernel_quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}}, "bias_quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}}, "kernel_range": null, "bias_range": null}}, {"class_name": "QActivation", "config": {"name": "relu2", "trainable": true, "dtype": "float32", "activation": {"class_name": "quantized_relu", "config": {"bits": 6, "integer": 0, "use_sigmoid": 0, "negative_slope": 0.0, "use_stochastic_rounding": false, "relu_upper_bound": null, "qnoise_factor": 1.0}, "__passive_serialization__": true}}}, {"class_name": "QDense", "config": {"name": "fc3", "trainable": true, "dtype": "float32", "units": 32, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "QInitializer", "config": {"initializer": {"class_name": "LecunUniform", "config": {"seed": null}, "__passive_serialization__": true}, "use_scale": true, "quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}, "__passive_serialization__": true}}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1", "config": {"l1": 9.999999747378752e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": {"class_name": "Clip", "config": {"min_value": -1, "max_value": 1}}, "bias_constraint": {"class_name": "Clip", "config": {"min_value": -1, "max_value": 1}}, "kernel_quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}}, "bias_quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}}, "kernel_range": null, "bias_range": null}}, {"class_name": "QActivation", "config": {"name": "relu3", "trainable": true, "dtype": "float32", "activation": {"class_name": "quantized_relu", "config": {"bits": 6, "integer": 0, "use_sigmoid": 0, "negative_slope": 0.0, "use_stochastic_rounding": false, "relu_upper_bound": null, "qnoise_factor": 1.0}, "__passive_serialization__": true}}}, {"class_name": "QDense", "config": {"name": "output", "trainable": true, "dtype": "float32", "units": 5, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "QInitializer", "config": {"initializer": {"class_name": "LecunUniform", "config": {"seed": null}, "__passive_serialization__": true}, "use_scale": true, "quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}, "__passive_serialization__": true}}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1", "config": {"l1": 9.999999747378752e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": {"class_name": "Clip", "config": {"min_value": -1, "max_value": 1}}, "bias_constraint": {"class_name": "Clip", "config": {"min_value": -1, "max_value": 1}}, "kernel_quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}}, "bias_quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}}, "kernel_range": null, "bias_range": null}}, {"class_name": "Activation", "config": {"name": "softmax", "trainable": true, "dtype": "float32", "activation": "softmax"}}]}, "keras_version": "2.4.0", "backend": "tensorflow"}

keras/qkeras_3layer_weights.h5

0 Bytes
Binary file not shown.

keras/qkeras_mnist_cnn.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": [null, 28, 28, 1], "dtype": "float32", "sparse": false, "ragged": false, "name": "input_1"}}, {"class_name": "QConv2D", "config": {"name": "q_conv2d", "trainable": true, "dtype": "float32", "filters": 16, "kernel_size": [3, 3], "strides": [1, 1], "padding": "valid", "data_format": "channels_last", "dilation_rate": [1, 1], "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "QInitializer", "config": {"initializer": {"class_name": "HeNormal", "config": {"seed": null}, "__passive_serialization__": true}, "use_scale": true, "quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}, "__passive_serialization__": true}}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": {"class_name": "Clip", "config": {"min_value": -1, "max_value": 1}}, "bias_constraint": {"class_name": "Clip", "config": {"min_value": -1, "max_value": 1}}, "kernel_quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}}, "bias_quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}}, "kernel_range": null, "bias_range": null}}, {"class_name": "QActivation", "config": {"name": "q_activation", "trainable": true, "dtype": "float32", "activation": {"class_name": "quantized_relu", "config": {"bits": 6, "integer": 0, "use_sigmoid": 0, "negative_slope": 0.0, "use_stochastic_rounding": false, "relu_upper_bound": null, "qnoise_factor": 1.0}, "__passive_serialization__": true}}}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d", "trainable": true, "dtype": "float32", "pool_size": [2, 2], "padding": "valid", "strides": [2, 2], "data_format": "channels_last"}}, {"class_name": "QConv2D", "config": {"name": "q_conv2d_1", "trainable": true, "dtype": "float32", "filters": 16, "kernel_size": [3, 3], "strides": [1, 1], "padding": "valid", "data_format": "channels_last", "dilation_rate": [1, 1], "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "QInitializer", "config": {"initializer": {"class_name": "HeNormal", "config": {"seed": null}, "__passive_serialization__": true}, "use_scale": true, "quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}, "__passive_serialization__": true}}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": {"class_name": "Clip", "config": {"min_value": -1, "max_value": 1}}, "bias_constraint": {"class_name": "Clip", "config": {"min_value": -1, "max_value": 1}}, "kernel_quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}}, "bias_quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}}, "kernel_range": null, "bias_range": null}}, {"class_name": "QActivation", "config": {"name": "q_activation_1", "trainable": true, "dtype": "float32", "activation": {"class_name": "quantized_relu", "config": {"bits": 6, "integer": 0, "use_sigmoid": 0, "negative_slope": 0.0, "use_stochastic_rounding": false, "relu_upper_bound": null, "qnoise_factor": 1.0}, "__passive_serialization__": true}}}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_1", "trainable": true, "dtype": "float32", "pool_size": [2, 2], "padding": "valid", "strides": [2, 2], "data_format": "channels_last"}}, {"class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "dtype": "float32", "data_format": "channels_last"}}, {"class_name": "Dropout", "config": {"name": "dropout", "trainable": true, "dtype": "float32", "rate": 0.5, "noise_shape": null, "seed": null}}, {"class_name": "QDense", "config": {"name": "q_dense", "trainable": true, "dtype": "float32", "units": 10, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "QInitializer", "config": {"initializer": {"class_name": "HeNormal", "config": {"seed": null}, "__passive_serialization__": true}, "use_scale": true, "quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}, "__passive_serialization__": true}}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": {"class_name": "Clip", "config": {"min_value": -1, "max_value": 1}}, "bias_constraint": {"class_name": "Clip", "config": {"min_value": -1, "max_value": 1}}, "kernel_quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}}, "bias_quantizer": {"class_name": "quantized_bits", "config": {"bits": 6, "integer": 0, "symmetric": 0, "alpha": 1, "keep_negative": true, "use_stochastic_rounding": false, "qnoise_factor": 1.0}}, "kernel_range": null, "bias_range": null}}, {"class_name": "Activation", "config": {"name": "softmax", "trainable": true, "dtype": "float32", "activation": "softmax"}}]}, "keras_version": "2.4.0", "backend": "tensorflow"}

keras/qkeras_mnist_cnn_weights.h5

46.3 KB
Binary file not shown.

0 commit comments

Comments
 (0)