Как я могу получить форму ввода моей модели трансформатора - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь преобразовать свою модель трансформатора в формат .tflite, но продолжаю видеть ошибки в форме ввода независимо от значений, которые я ввел. Я попытался ввести размеры партии и размеры модели без разницы. Я получаю в основном ошибку ValueError: None is only supported in the 1st dimension.

Код конвертера:

import tensorflow as tf

model = tf.saved_model.load("saved_model\d_1024\\b_128\E_440")


concrete_func = model.signatures[
  tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY]
concrete_func.inputs[0].set_shape([the part i need help with])
converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])

tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

и код сохранения:


from model import transformer
from dataset import get_dataset, preprocess_sentence
from Main import evaluate

parser = argparse.ArgumentParser()
parser.add_argument(
    '--max_samples',
    default=25000,
    type=int,
    help='maximum number of conversation pairs to use')
parser.add_argument(
    '--max_length', default=40, type=int, help='maximum sentence length')
parser.add_argument('--batch_size', default=64, type=int)
parser.add_argument('--num_layers', default=2, type=int)
parser.add_argument('--num_units', default=512, type=int)
parser.add_argument('--d_model', default=1024, type=int)
parser.add_argument('--num_heads', default=8, type=int)
parser.add_argument('--dropout', default=0.1, type=float)
parser.add_argument('--activation', default='relu', type=str)
parser.add_argument('--epochs', default=20, type=int)

hparams = parser.parse_args()

dataset, tokenizer = get_dataset(hparams)

model = transformer(hparams)

model.load_weights('Weights_only/d_1024/b_128/e_200/cp.ckpt')

model.save("saved_model\d_1024\\b_128\E_440")

и краткое описание модели:

Model: "transformer"
_______________________
Layer (type)                 Output Shape              Param #   
=================================================================
inputs (InputLayer)          [(None, None)]            0         
_______________________
dec_inputs (InputLayer)      [(None, None)]            0         
_______________________
enc_padding_mask (Lambda)    multiple                  0         
_______________________
encoder (Model)              multiple                  18848768  
_______________________
look_ahead_mask (Lambda)     multiple                  0         
_______________________
dec_padding_mask (Lambda)    multiple                  0         
_______________________
decoder (Model)              multiple                  27249664  
_______________________
outputs (Dense)              multiple                  8351700   
=================================================================
Total params: 54,450,132
Trainable params: 54,450,132
Non-trainable params: 0
_______________________

модель относится к https://github.com/bryanlimy/tf2-transformer-chatbot, но я добавил

checkpoint_path = "Weights_only/d_1024/b_128/e_200/cp.ckpt"
    checkpoint_dir = os.path.dirname(checkpoint_path)

    # Create a callback that saves the model's weights
    cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path,
                                                     save_weights_only=True,
                                                     verbose=1)

    model.fit(dataset, epochs=hparams.epochs, callbacks=[cp_callback])

, чтобы сохранить веса для модели

...