Вы можете сначала преобразовать свои значения Pandas в рваный тензор, а затем сделать из него набор данных:
import tensorflow as tf
import pandas as pd
df = pd.DataFrame({'label': [0, 1, 1, 0],
'sentence': ['Hello world', 'my name is john smith',
'Hello! My name is', 'foo baar'],
'encoded_sentence': [[5, 7], [1, 9, 10, 2, 6],
[5, 3, 9, 10], [8, 4]]})
features = tf.ragged.stack(list(df['encoded_sentence']))
target = tf.convert_to_tensor(df['label'].values)
dataset = tf.data.Dataset.from_tensor_slices((features, target))
for f, t in dataset:
print(f.numpy(), t.numpy())
Вывод:
[5 7] 0
[ 1 9 10 2 6] 1
[ 5 3 9 10] 1
[8 4] 0
Примечание, которое вы можете использовать padded_batch
, чтобы получить партии примеров из набора данных.
РЕДАКТИРОВАТЬ: Поскольку пакетное пакетирование, кажется, не работает с набором данных, созданным из рваного тензора, вы также можете сначала преобразовать рваный тензор в обычный:
import tensorflow as tf
import pandas as pd
df = pd.DataFrame({'label': [0, 1, 1, 0],
'sentence': ['Hello world', 'my name is john smith',
'Hello! My name is', 'foo baar'],
'encoded_sentence': [[5, 7], [1, 9, 10, 2, 6],
[5, 3, 9, 10], [8, 4]]})
features_ragged = tf.ragged.stack(list(df['encoded_sentence']))
features = features_ragged.to_tensor(default_value=-1)
target = tf.convert_to_tensor(df['label'].values)
dataset = tf.data.Dataset.from_tensor_slices((features, target))
batches = dataset.batch(2)
for f, t in batches:
print(f.numpy(), t.numpy())
Вывод:
[[ 5 7 -1 -1 -1]
[ 1 9 10 2 6]] [0 1]
[[ 5 3 9 10 -1]
[ 8 4 -1 -1 -1]] [1 0]