我已经使用我自己的文本对 distilgpt2 模型进行了run_language_modeling.py
微调,并且在训练和run_generation.py
脚本产生预期结果后它的工作正常。
现在我想将其转换为 Tensorflow Lite 模型并使用以下方法进行
from transformers import *
CHECKPOINT_PATH = '/content/drive/My Drive/gpt2_finetuned_models/checkpoint-2500'
model = GPT2LMHeadModel.from_pretrained("distilgpt2")
model.save_pretrained(CHECKPOINT_PATH)
model = TFGPT2LMHeadModel.from_pretrained(CHECKPOINT_PATH, from_pt=True)
但我不认为我在转换后这样做是正确的,当我写
print(model.inputs)
print(model.outputs)
我明白了
None
None
但我仍然使用以下方式进行 TFLite 转换:
import tensorflow as tf
input_spec = tf.TensorSpec([1, 64], tf.int32)
model._set_inputs(input_spec, training=False)
converter = tf.lite.TFLiteConverter.from_keras_model(model)
# FP16 quantization:
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_types = [tf.float16]
tflite_model = converter.convert()
open("/content/gpt2-fp16.tflite", "wb").write(tflite_model)
但是不起作用,并且在使用生成的tflite
模型时出现错误:
tensorflow/lite/kernels/kernel_util.cc:249 d1 == d2 || d1 == 1 || d2 == 1 不正确。
我确信这与我的模型没有正确转换并获取None
输入/输出有关。
有谁知道如何解决这个问题?
谢谢