Преобразовать модель кераса с тензорным потоком со строковым вводом в модель tf lite. (расшифруйте тензор строки Unicode вручную) - PullRequest
1 голос
/ 08 апреля 2019

У меня есть модель keras, предварительно обрабатывающая строку в первом слое.
Либо с помощью «tf.strings.unicode_decode», либо с «tf.io.decode_raw». К сожалению, обе операции не поддерживаются TF Lite.

У меня вопрос, есть ли способ расшифровать струнный тензор «вручную»
(с помощью простого тензорного потока и операций алгебры)? Какова структура тензора строки?
Содержит ли он просто указатель на первый символ? Если да, то как мне это обработать?

У меня нет опыта работы с пользовательскими операциями tf lite, но, возможно, это был бы лучший подход для реализации операции декодирования таким образом.

Моей первой попыткой было ввести строку непосредственно в виде массива char (uint8). Но tf lite требует, чтобы входная фигура была «Нет» только в первом измерении. Это означает, что я должен установить максимальную длину массива символов при создании модели. Поэтому я надеюсь, что есть лучшая реализация.

Это код моей модели керас:

def text_preprocess(x):
  b = tf.io.decode_raw(x,tf.uint8)
  #do tensor operations
  return b

input_text = tf.keras.layers.Input( dtype=tf.string, shape=(1,))
embedding = tf.keras.layers.Lambda(text_preprocess)(input_text)

model = tf.keras.Model(inputs=[input_text], outputs=embedding)

Конечно, преобразование этой модели приводит к предупреждению:

Преобразование неподдерживаемой операции: DecodeRaw

...