#python #string #tensorflow #split #tensor
#python #строка #tensorflow #разделить #тензор
Вопрос:
У меня есть объект набора данных tf, определенный как показано ниже:
train_dataset = tf.data.Dataset.from_tensor_slices((english_train, german_train))
print(train_dataset.element_spec)
Output:
(TensorSpec(shape=(), dtype=tf.string, name=None), TensorSpec(shape=(14,), dtype=tf.int32, name=None))
Объекты «english» и «german», используемые в конструкциях, представляют собой массив строк (shape=(16000,) type=string) и массив массивов целых чисел (shape = (16000, 14) type=int) соответственно.
Я хочу разделить эти строки в английских объектах (например, «Я на английском» -> [«I», «am», «in», «english»]). Это должно быть сделано после того, как я создал набор данных.
Я использовал метод map, чтобы попытаться это сделать:
string_splitter = lambda english, german : tf.strings.split(english, sep=' ')
train_dataset.map(string_splitter)
print(train_dataset.element_spec)
Output:
(TensorSpec(shape=(), dtype=tf.string, name=None), TensorSpec(shape=(14,), dtype=tf.int32, name=None))
После того, как я применяю эту операцию, я проверяю набор данных, чтобы убедиться, что все прошло соответствующим образом:
list(train_dataset.as_numpy_iterator())[0:3]
Output:
[(b"that's ludicrous .",
array([ 1, 11, 6, 5097, 3, 2, 0, 0, 0, 0, 0,
0, 0, 0], dtype=int32)),
(b'is anybody home ?',
array([ 1, 6, 366, 20, 75, 7, 2, 0, 0, 0, 0, 0, 0,
0], dtype=int32)),
(b"get tom's advice .",
array([ 1, 320, 52, 186, 5, 1058, 3, 2, 0, 0, 0,
0, 0, 0], dtype=int32))]
Как мы можем видеть, строки были разделены не так, как я предполагал.
Что я могу сделать?
PS: строки имеют переменную длину.
Ответ №1:
Похоже, моя ошибка заключается в том, что я предполагал, что метод map был на месте, но, видимо, я должен назначить его (например train_dataset = train_dataset.map(string_splitter)
).
Кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь.
Кроме того, я должен исправить функцию разделения.