У меня есть Pandas DataFrame, и я загружаю его часть в набор данных tf.data:
dataset = tf.data.Dataset.from_tensor_slices((
df.StringColumn.values,
df.IntColumn1.values,
df.IntColumn2.values,
))
Теперь я хотел бы использовать что-то вроде flat_map
для создания производного набора данных, который берет данные в каждой строке и создает набор строк в производном наборе данных для каждой строки в оригинале.
Но flat_map
, кажется, просто передает мне тензоры-заполнители в функции lambda
.
Я использую TensorFlow 2.0 alpha 0, если это имеет значение.
Изменить:
Мне бы хотелось написать что-то вроде этого:
derived = dataset.flat_map(replicate)
def replicate(s, i1, i2):
return [[0, s, i1, i2],
[0.25, s, i1, i2],
[0.5, s, i1, i2],
[0.75, s, i1, i2]]
... и тогда derived
будет набором данных с четырьмя столбцами и в четыре раза больше строк, чем dataset
.
Но когда я пытаюсь это сделать, s
- это не значение, а тензор-заполнитель строк.
Редактировать 2:
Хорошо, я имел в виду, что функция replicate
должна знать значения реплицируемой строки:
slice_count = 16
def price(frac, total, size0, price0, size1, price1, size2, price2, size3, price3):
total_per_slice = total / slice_count
start = frac * total_per_slice
finish = start + total_per_slice
price = \
(price0 * (min(finish, size0) - max(start, 0) if 0 < finish and start < size0 else 0)) + \
(price1 * (min(finish, size1) - max(start, size0) if size0 < finish and start < size1 else 0)) + \
(price2 * (min(finish, size2) - max(start, size1) if size1 < finish and start < size2 else 0)) + \
(price3 * (min(finish, size3) - max(start, size2) if size2 < finish and start < size3 else 0))
def replicate(size0, price0, size1, price1, size2, price2, size3, price3):
total = size0 + size1 + size2 + size3
return [[
price(frac, total, size0, price0, size1, price1, size2, price2, size3, price3),
frac / slice_count] for frac in range(slice_count)]
derived = dataset.flat_map(replicate)
Недостаточно просто иметь возможность передавать заполнители. Это то, что я могу сделать, или это выполнимо, если я могу каким-то образом перевести это в расчетные графики TensorFlow, или это просто нереально, как я пытаюсь это сделать?