Как сохранить набор данных в нескольких осколках, используя `tf.data.dataset.save`Python

Программы на Python
Anonymous
 Как сохранить набор данных в нескольких осколках, используя `tf.data.dataset.save`

Сообщение Anonymous »

Как я могу сохранить tf.data.dataset в нескольких осколках, используя tf.data.dataset.save () ? Я читаю в своем наборе данных из CSV с использованием tf.data.experimental.make_csv_dataset .
Документы TF здесь не очень полезны. Существует аргумент shard_func , но приведенные примеры не являются полезными, и неясно, как составить карту с int детерминированным образом. Использование случайного int < /code> s, кажется, тоже не работает.TypeError: unsupported operand type(s) for %: 'collections.OrderedDict' and 'int'
Single Shard (работает)
ниже успешно сохраняется до одного осколка.
import pandas as pd
import numpy as np
import tensorflow as tf

# gen data
n=10000
pd.DataFrame(
{'label': np.random.randint(low=0, high=2, size=n),
'f1': np.random.random(n),
'f2': np.random.random(n),
'f3': np.random.random(n),
'c1': np.random.randint(n),
'c2': np.random.randint(n)}
).to_csv('tmp.csv')
# load data into a tf.data.Dataset
data_ts = tf.data.experimental.make_csv_dataset(
'tmp.csv', 1, label_name='label', num_epochs=1)
data_ts.save('tmp.data') # single shard, works!

несколько осколков USInd randint (сохраняет один осколок)
Пытаться сохранить в нескольких осколках, используя случайное число, все еще сохраняет только на Один осколок, хотя и со случайным int в имени файла. < /p>
# Try sharding, using random numbers.
def random_shard_function(features, label):
return np.int64(np.random.randint(10))
data_ts.save('tmp2.data', shard_func=random_shard_function)



Modulo shard (ошибка) < /h3>
Попробует раздавление по этому вопросу. < /P>
def modulo_shard_function(features, label):
return x & 10
data_ts.save('tmp2.data', shard_func=modulo_shard_function)
< /code>
TypeError: unsupported operand type(s) for &: 'collections.OrderedDict' and 'int'
отладка - понятия не имею, как работает shard_fun. Однажды, и тензоры являются символиками
def debug_shard_function(features, label):
for val in features.items():
print(f'{val=}')
print(f'{label=}')
print(f'{type(val[1])}')
return np.int64(10)
data_ts.save('tmp2.data', shard_func=debug_shard_function)
< /code>
Output:

Still saves to a single shard
val=('', )
val=('f1', )
val=('f2', )
val=('f3', )
val=('c1', )
val=('c2', )
label=



Подробнее здесь: https://stackoverflow.com/questions/793 ... taset-save

Вернуться в «Python»