[英]Operation type in full integer quantization method in TensorFlowLite
我想在預訓練模型(LeNet5)上使用 TensorFlow 模型優化包應用訓練后量化(全整數)。 https://www.tensorflow.org/model_optimization/guide/quantization/post_training
model = Sequential()
model._name = 'LeNet5'
model.add(tf.keras.layers.InputLayer(input_shape=(28, 28)))
model.add(tf.keras.layers.Reshape(target_shape=(28, 28, 1)))
model.add(
Conv2D(6, kernel_size=(5, 5), strides=(1, 1), activation='tanh', padding='same'))
model.add(AveragePooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid'))
model.add(Conv2D(16, kernel_size=(5, 5), strides=(1, 1), activation='tanh', padding='valid'))
model.add(AveragePooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid'))
model.add(Flatten())
model.add(Dense(120, activation='tanh'))
model.add(Dense(84, activation='tanh'))
model.add(Dense(10, activation='softmax'))
並使用此代碼,我應用了全整數訓練后量化:
mnist_train, _ = tf.keras.datasets.mnist.load_data()
images = tf.cast(mnist_train[0], tf.float32) / 255.0
mnist_ds = tf.data.Dataset.from_tensor_slices((images)).batch(1)
def representative_data_gen():
for input_value in mnist_ds.take(100):
yield [input_value]
converter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_SIZE]
converter.representative_dataset = representative_data_gen
converter.allow_custom_ops = True
converter.target_spec.supported_types = [tf.int8]
converter.inference_input_type = tf.int8
converter.inference_output_type = tf.int8
full_integer_quantization_model = converter.convert()
open("tflite_model.tflite", "wb").write(full_integer_quantization_model)
它在准確性方面工作得很好,但是當我嘗試打印每一層的數據類型(操作,如 conv、activation、bias)時,我看到一些操作是 int32 而不是 int8。
我不知道為什么?
TFLite 如何決定在 int32 和 int8 中執行一些操作?
是否可以在 TFLite 中控制此功能(是否可以選擇)並將所有操作作為 int8 執行?
你看過這個https://www.tensorflow.org/lite/performance/quantization_spec了嗎?
偏置值具有 32 位寬度
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.