繁体   English   中英

Keras model和TF Lite转换器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM