Как выполнить предварительную обработку строк в лямбда-слое моделей Keras? - PullRequest
0 голосов
/ 04 апреля 2019

У меня проблема в том, что значение, передаваемое слою Lambda (во время компиляции), является заполнителем, сгенерированным keras (без значений).Когда модель компилируется, метод .eval () выдает ошибку:

Вы должны передать значение для тензора-заполнителя 'input_1' со строкой dtype и shape [?, 1]

def text_preprocess(x):
  strings = tf.keras.backend.eval(x)
  vectors = []
  for string in strings:
    vector = string_to_one_hot(string.decode('utf-8'))
    vectors.append(vector)
  vectorTensor = tf.constant(np.array(vectors),dtype=tf.float32)
  return vectorTensor

input_text = Input(shape=(1,), dtype=tf.string)
embedding = Lambda(text_preprocess)(input_text)
dense = Dense(256, activation='relu')(embedding)
outputs = Dense(2, activation='softmax')(dense)

model = Model(inputs=[input_text], outputs=outputs)
model.compile(loss='categorical_crossentropy',optimizer='adam', metrics=['accuracy'])
model.summary()
model.save('test.h5')

Если я статически передаю массив строк во входной слой, я могу скомпилировать модель, но получаю ту же ошибку, если хочу преобразовать модель в tflite.

#I replaced this line:
input_text = Input(shape=(1,), dtype=tf.string)

#by this lines:
test = tf.constant(["Hello","World"])
input_text = Input(shape=(1,), dtype=tf.string, tensor=test)

#but calling this ...
converter = TFLiteConverter.from_keras_model_file('string_test.h5')
tfmodel = converter.convert()

#... still leads to this error:

InvalidArgumentError: Вы должны передать значение для тензора-заполнителя 'input_3' со строкой и формой dtype [2] [[{{node input_3}}]]

1 Ответ

0 голосов
/ 08 апреля 2019

Хорошо, я наконец решил это так:

def text_preprocess(x):
  b = tf.strings.unicode_decode(x,'UTF-8')
  b = b.to_tensor(default_value=0)
  #do things with decoded string
  one_hot = K.one_hot(b,one_hot_size)
  return one_hot

...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...