![](/img/trans.png)
[英]Converting Keras RNN model to TensorFlow Lite model in TF2
[英]Keras model and TF Lite converter
我是 TF 新手,我有一个好奇心:如果我必须将 Keras model 转换为 TF Lite,它使用 TF Lite 不支持且必须注册的操作,我如何使用转换器来转换 Z20FEE7BB66F4294C3E32783EFA7D9BAFCZ model强迫自己同时允许自定义操作( https://www.tensorflow.org/lite/guide/ops_custom )?
例如,假设我们有这个非常简单的 model 并假设 Conv2D 是 TF Lite 不支持的操作:
import numpy as np
from tensorflow import keras
from tensorflow.keras import layers
# Model / data parameters
num_classes = 10
input_shape = (28, 28, 1)
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# Scale images to the [0, 1] range
x_train = x_train.astype("float32") / 255
x_test = x_test.astype("float32") / 255
# Make sure images have shape (28, 28, 1)
x_train = np.expand_dims(x_train, -1)
x_test = np.expand_dims(x_test, -1)
# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
model = keras.Sequential(
[
keras.Input(shape=input_shape),
layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Flatten(),
layers.Dropout(0.5),
layers.Dense(num_classes, activation="softmax"),
]
)
batch_size = 128
epochs = 15
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1)
score = model.evaluate(x_test, y_test, verbose=0)
print("Test loss:", score[0])
print("Test accuracy:", score[1])
如何按照教程使用 TF Lite 转换器以允许自定义操作 Conv2D(实际上这不是自定义操作)?
在转换层中,将 Conv2D 操作变成自定义操作并不容易,因为 TFLite 转换器始终偏爱内置运算符。
但是,有一些解决方法:
(1) 您可以使用 flatbuffer 库来操作 TFLite 文件。 您可以手动将图表中的一些运算符作为自定义操作。
(2) 如果您的情况需要,您可以修改Conv2D算子的TensorFlow Lite源代码。
TFLite Conv2D 算子是 TFLite 内置算子中优化良好的算子之一。 为了性能,最好不要用自定义操作替换它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.