Попытка преобразовать структуру DataFrame панд со значениями списка в тензор потока DataSet - PullRequest
0 голосов
/ 16 апреля 2019

Я создаю DNNRegressor с использованием tenorflow, и моя проблема заключается в процессе преобразования моих функций, которые хранятся в виде DataFrame pandas, в структуры набора данных tenorflow. Более конкретно, из-за использования как tf.data.Dataset.from_tensor_slices, так и созданной мной функции столбцов объектов.

Из этого руководства по тензорному потоку меня убеждали, что можно создать структуру данных с многомерной функцией. В руководстве упоминается, что при создании feature_column можно указать форму объекта. Приведены два примера: вектор из 10 элементов под ключом "Bowling" и матрица 10x5 под ключом "MyMatrix". Следуя примеру, я создал несколько многомерных объектов. Для простоты я создал пример кода, который я выкладываю ниже с двумя многомерными объектами, используя pandas DataFrame, в "matrix" есть два примера матриц 2x2 и в "vector" два примера векторов из 3 элементов. Для каждого из двух примеров есть два вывода: x и y (я не видел ничего, подтверждающего, что это представление возможно, однако это было бы наиболее удобно в контексте проблемы)

import tensorflow as tf
import pandas as pd

# Create features DataFrame
feature_header = ['matrix', 'vector']
feature_table = [ [ [[1, 2], [3,4]], [5,6,7] ],
                 [ [[8, 9], [10,11]], [12,13,14] ] ]
features = pd.DataFrame(feature_table, columns=feature_header)

# Create outputs DataFrame
header_targets = ['x', 'y']
table_targets = [ [7, 8],
                 [9, 10] ]
labels = pd.DataFrame(table_targets, columns=header_targets)

ds = tf.data.Dataset.from_tensor_slices((features, labels))

Ошибка в последней строке при преобразовании в набор данных с тензорным потоком

TypeError: Expected binary or unicode string, got [[1, 2], [3, 4]]

Мой вопрос: возможно ли сделать это преобразование? Я могу сделать преобразование, если я создаю новый столбец для каждого элемента матрицы / вектора, но это становится довольно хаотичным, когда матрица имеет размер 12x12.

Я использую tenorflow версии 1.13.1 и python 3.6.4

EDIT

Попробовав использовать пустые многомерные массивы вместо списков, изменил объявление таблицы объектов на следующее

feature_table = [ [ np.array([[1, 2], [3,4]]), np.array([5,6,7]) ],
                 [ np.array([[8, 9], [10,11]]), np.array([12,13,14]) ] ]

Получил следующую ошибку

TypeError: Expected binary or unicode string, got array([[1, 2],
       [3, 4]])
...