У меня очень большой набор данных в формате CSV (500K + строки и 6500+ столбцы), который выглядит примерно так (все целочисленное значение, за которым следует приведение к float64 во время цикла пакетного импорта):
1,7930472962,92,5,2,9471037239,67,2,1...8371097814,81,2,3
2,2091185638,92,5,2,3773622239,67,2,1...8378747918,81,2,3
Таким образом, исходя из длины строк, я не могу вписать все в память, я транслирую все из CSV следующим образом:
train_dataset = tf.data.experimental.make_csv_dataset(
sys.argv[1],
batch_size = BATCHSIZE,
column_names = SELECT_COLUMNS,
column_defaults = DEFAULTS,
label_name = LABEL_COLUMN,
field_delim=',',
use_quote_delim=True,
na_value='',
header=False,
num_epochs=1,
shuffle=True,
shuffle_buffer_size=500,
shuffle_seed=None,
num_parallel_reads=1,
sloppy=False,
num_rows_for_inference=1000,
compression_type=None,
ignore_errors=False
)
Я получаю диктовку, которую затем могу вытянутьмассивы из этого способа:
for batch, label in train_dataset:
for key, value in batch.items():
print(value.numpy())
Проблема в том, что с каждой партией массивы Numpy группируют все по столбцам, в то время как мне нужно, чтобы каждая строка CSV из пакета была преобразована в ndarray, в основном несколько вложенных ndarraysиз пакета внутри ndarray, чтобы я мог сделать что-то вроде этого:
(x_train, _), (x_test, _) = loader.load_data()
train_dataset = tf.data.Dataset.from_tensor_slices(x_train)
train_dataset = train_dataset.shuffle(buffer_size=train_buf)
train_dataset = train_dataset.batch(batch_size)
Мне трудно понять переход на 2.0 espe, за которым следует операция shuffle, особенно потому, что tf.dataобеспокоен. Я думаю, что мне нужно сначала упаковать каждую строку CSV в тензорные срезы, а затем создать набор данных с помощью tf.data.Dataset.from_tensor_slices ()?
Заранее спасибо