#python #tensorflow #keras #tensorflow-lite #quantization
Вопрос:
Я попробовал реализовать QAT в своем сценарии обучения модели. Я использую функциональный API для создания модели.
Шаги, которые я выполнил для реализации QAT API,
- Постройте архитектуру модели
- Вставлена соответствующая функция quantize_model
- Обучите модель
Позвольте мне предоставить вам фрагмент кода для получения дополнительной информации
from tensorflow.keras import regularizers
import numpy as np
from tensorflow.keras.models import Model
from tensorflow.keras.layers import TimeDistributed,SeparableConv1D,Dense,Embedding,Conv1D
from tensorflow.keras.layers import Input, Dropout, MaxPooling1D,Flatten, concatenate, BatchNormalization, AveragePooling1D
from tensorflow.keras.layers import LeakyReLU
from tensorflow.keras.utils import Progbar
from tensorflow.keras.constraints import non_neg , min_max_norm, max_norm , unit_norm
from tensorflow.keras.optimizers import Nadam
import tensorflow_model_optimization as tfmot
from tensorflow_model_optimization.python.core.quantization.keras import quantize
words_input = Input(shape=(None,),dtype='int32',name='words_input')
words = Embedding(input_dim=wordEmbeddings.shape[0], output_dim=wordEmbeddings.shape[1], weights=[wordEmbeddings], trainable=False)(words_input)
............
convd_output= SeparableConv1D(kernel_size=4, filters=128, padding='same', activation='relu', strides=1, depth_multiplier=3, bias_regularizer=regularizers.l2(0.0001), kernel_constraint =min_max_norm(0.4,0.9))(output)
convd_output=AveragePooling1D(pool_size=2, strides=1, padding='same')(convd_output)
convd_output=Dropout(0.1)(convd_output)
flatten_output=TimeDistributed(Flatten())(convd_output)
output = TimeDistributed(Dense(len(label2Idx), activation='softmax'))(flatten_output)
inputs_list=[words_input, casing_input,newline_input]
model = Model(*inputs_list, output)
q_aware_model = tfmot.quantization.keras.quantize_model(model)
opt = Nadam(lr=0.0005)
q_aware_model.compile(loss='sparse_categorical_crossentropy', optimizer=opt,metrics = ['sparse_categorical_accuracy'])
print(q_aware_model.summary())
Подробная информация о версии
тензорный поток==2.3.0
тензорный поток-модель-оптимизация==0.5.0
Проблема : Я использую функциональный API, который поддерживается в QAT API, но все равно получаю ошибку значения
quantize_model » to_quantize может быть только последовательной моделью tf.keras или ошибкой значения: to_quantize может быть только последовательной или функциональной моделью tf.keras.
Не смог разобраться в этой проблеме. Будет полезно, если кто-нибудь поможет преодолеть это. Заранее спасибо
Комментарии:
1. Добавьте импорт в свой вопрос.
2. @Dr. Snoopy Я добавил импорт
3. Не видя вашей полной модели, трудно отлаживать-возможно, что один из ваших входных данных не является входным слоем слоев keras, или у вас есть некоторая обработка тензора, не относящаяся к keras, в определении графика. Попробуйте распечатать свойство
model._is_graph_network
сразу после инициализации модели. Если это правда, то здесь есть ошибка в TFMOT.