Tensorflow не может квантовать функцию изменения формы
Я собираюсь обучить мою модель квантованию. Однако, когда я его использую, tenorflow_model_optimization не может квантовать функцию tf.reshape и выдает ошибку.
- версия tenorflow: '2.4.0-dev20200903'
- версия python: 3.6.9
код:
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '3'
from tensorflow.keras.applications import VGG16
import tensorflow_model_optimization as tfmot
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
quantize_model = tfmot.quantization.keras.quantize_model
inputs = keras.Input(shape=(784,))
# img_inputs = keras.Input(shape=(32, 32, 3))
dense = layers.Dense(64, activation="relu")
x = dense(inputs)
x = layers.Dense(64, activation="relu")(x)
outputs = layers.Dense(10)(x)
outputs = tf.reshape(outputs, [-1, 2, 5])
model = keras.Model(inputs=inputs, outputs=outputs, name="mnist_model")
# keras.utils.plot_model(model, "my_first_model.png")
q_aware_model = quantize_model(model)
и вывод:
Traceback (most recent call last):
File "<ipython-input-39-af601b78c010>", line 14, in <module>
q_aware_model = quantize_model(model)
File "/home/essys/.local/lib/python3.6/site-packages/tensorflow_model_optimization/python/core/quantization/keras/quantize.py", line 137, in quantize_model
annotated_model = quantize_annotate_model(to_quantize)
File "/home/essys/.local/lib/python3.6/site-packages/tensorflow_model_optimization/python/core/quantization/keras/quantize.py", line 210, in quantize_annotate_model
to_annotate, input_tensors=None, clone_function=_add_quant_wrapper)
...
File "/home/essys/anaconda3/envs/tf_gpu/lib/python3.6/site-packages/tensorflow/python/autograph/impl/api.py", line 667, in wrapper
raise e.ag_error_metadata.to_exception(e)
TypeError: in user code:
TypeError: tf__call() got an unexpected keyword argument 'shape'
Если кто знает, помогите пожалуйста?
0 ответов
Причина в том, что ваш уровень еще не поддерживает QAT. Если вы хотите его квантовать, вам нужно самостоятельно написать квантование с помощью quantize_annotate_layer, передать его через quantize_scope и применить к своей модели с помощью quantize_apply, как описано здесь: https://www.tensorflow.org/model_optimization/guide/quantization/training_comprehensive_guide?hl=en#quantize_custom_keras_layer
У меня есть создать batch_norm_layer в здесь в качестве примера
Tensorflow 2.x не является полным для уровня QAT, пожалуйста, рассмотрите возможность использования tf1.x, добавив FakeQuant после операторов.