我将 Tensorflow lite 2.1.0-ALPHA-PRECOMPILED 用于带有标头的 arduino nano 33 ble。
模型定义
model = tf.keras.Sequential()
model.add(layers.Dense(16,activation='relu', input_shape=(seq_len,12,1)))
model.add(layers.Dense(16, activation='relu'))
model.add(layers.Dense(1, activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(1, activation='sigmoid'))
模型总结
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_4 (Dense) (None, 100, 12, 16) 32
dense_5 (Dense) (None, 100, 12, 16) 272
dense_6 (Dense) (None, 100, 12, 1) 17
flatten_1 (Flatten) (None, 1200) 0
dense_7 (Dense) (None, 1) 1201
=================================================================
Total params: 1,522
Trainable params: 1,522
Non-trainable params: 0
_________________________________________________________________
然后我转换为 tflite
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()
open('saved_model/ver4.tflite','wb').write(tflite_model)
我加入了arduino
static tflite::MicroMutableOpResolver<2> micro_op_resolver; // NOLINT
micro_op_resolver.AddBuiltin(tflite::BuiltinOperator_FULLY_CONNECTED,
tflite::ops::micro::Register_FULLY_CONNECTED());
micro_op_resolver.AddBuiltin(tflite::BuiltinOperator_RESHAPE,
tflite::ops::micro::Register_RESHAPE());
在这种情况下我得到一个错误:
Didn't find op for builtin opcode 'SHAPE' version '1'
Failed to get registration from op code SHAPE
Failed starting model allocation.
我试着包括
micro_op_resolver.AddBuiltin(tflite::BuiltinOperator_SHAPE,
tflite::ops::micro::Register_SHAPE());
但是收到错误消息
Compilation error: 'Register_SHAPE' is not a member of 'tflite::ops::micro'
我也试过了
static tflite::AllOpsResolver resolver;
但也没有用。
Didn't find op for builtin opcode 'SHAPE' version '1'
Failed to get registration from op code SHAPE
Failed starting model allocation.
像这样