Как я могу получить доступ / обработать контент в наборах данных TensorFlow? - PullRequest
2 голосов
/ 26 мая 2019

Я работаю с набором данных cnn_dailymail , который является частью набора данных TensorFlow . Я получаю к нему доступ следующим образом:

import tensorflow_datasets as tfds
data, info = tfds.load('cnn_dailymail', with_info=True)
train_data, test_data = data['train'], data['test']

Чтобы извлечь один пример из набора данных, который я использую:

cnn_ex, = train_data.take(1)
cnn_ex['highlights'].numpy()

Это вернет строку, подобную этой: "emma monaghan, 27, from glasgow, used to weigh 18st 5lbs .". Я хотел бы применить некоторые шаги предварительной обработки к этому набору данных, чтобы я мог использовать его как вход в алгоритм глубокого обучения. Пример выше должен выглядеть следующим образом после предварительной обработки: "<start> emma monaghan, 27, from glasgow, used to weigh 18st 5lbs . <end>".

Есть ли способ получить доступ и предварительно обработать весь текст (в пределах train_data ) сразу, не применяя функцию take() несколько раз? Например, преобразование набора данных TensorFlow в простой массив уже поможет. Спасибо!

Ответы [ 2 ]

1 голос
/ 26 мая 2019

Вы можете использовать dataset.map(), чтобы применить преобразования к вашим данным.Например:

import tensorflow as tf
import tensorflow_datasets as tfds

data, info = tfds.load('cnn_dailymail', with_info=True)
dataset_train, dataset_test = data['train'], data['test']

def map_fn(x, start=tf.constant('<start>'), end=tf.constant('<end>')):
    strings = [start, x['highlights'], end]
    x['highlights'] = tf.strings.join(strings, separator=' ')
    return x

dataset_train = dataset_train.map(map_fn) # <-- apply transformation for the whole data
elem,  = dataset_train.take(1)
print(elem['highlights'].numpy())
# b'<start> arthur potts dawson: british ... <end>'

1 голос
/ 26 мая 2019

Это зависит от вашей конкретной цели.Может быть, tfds.as_numpy() это то, что вы ищете.Вы можете применить его к train_data, чтобы получить генератор_объекта.Вы можете выполнить итерацию непосредственно или применить любую функцию карты

train_data = train_data.map(map_func)
for i in tfds.as_numpy(train_data):
    print(i)
    ...
...