Преобразование из Pandas dataframe в тензорный объект TensorFlow
Я все еще новичок в Python, Machine Learning и TensorFlow, но прилагаю все усилия, чтобы прыгать прямо в голову. Я мог бы использовать некоторую помощь, хотя.
Мои данные в настоящее время находятся в фрейме Pandas. Как я могу преобразовать это в объект TensorFlow? Я пробовал
dataVar_tensor = tf.constant(dataVar)
depth_tensor = tf.constant(depth)
Но я получаю ошибки [15780 rows x 9 columns] - got shape [15780, 9], but wanted []
.
Я уверен, что это, вероятно, простой вопрос, но я действительно могу воспользоваться помощью.
Большое спасибо
пс. Я запускаю shadoworflow 0.12 с Anaconda Python 3.5 в Windows 10
Ответы
Ответ 1
Я думаю, что у меня это получилось!: D
Я преобразовал свой фреймворк Pandas в массив Numpy, используя .as_matrix()
Теперь, используя
dataVar_tensor = tf.constant(dataVar, dtype = tf.float32, shape=[15780,9])
depth_tensor = tf.constant(depth, 'float32',shape=[15780,1])
похоже, работает. Я не могу сказать, что это окончательно, потому что у меня есть другие препятствия для преодоления, чтобы заставить мой код работать, но, надеюсь, шаг в правильном направлении. Спасибо за вашу помощь.
В стороне, мои испытания получения учебника для работы над моими собственными данными продолжаются в следующем вопросе Преобразование учебника TensorFlow для работы с моими собственными данными
Ответ 2
Следующие функции легко основаны на входных данных массива numpy
:
import tensorflow as tf
import numpy as np
a = np.array([1,2,3])
with tf.Session() as sess:
tf.global_variables_initializer().run()
dataVar = tf.constant(a)
print(dataVar.eval())
-> [1 2 3]
Не забудьте запустить session
и run()
или eval()
ваш тензорный объект, чтобы увидеть его содержимое; иначе он просто даст вам общее описание.
Я подозреваю, что, поскольку ваши данные находятся в DataFrame, а не просто массиве, вам нужно поэкспериментировать с параметром shape
tf.constant()
, который вы в настоящее время не указали, чтобы помочь ему понять размерность DataFrame и обработать его индексы и т.д.?
Ответ 3
Вот одно решение, которое я нашел, что работает на Google Colab, вероятно, должно работать на локальной машине тоже
import pandas as pd
import tensorflow as tf
#Read the file to a pandas object
data=pd.read_csv('filedir')
#convert the pandas object to a tensor
data=tf.convert_to_tensor(data)
type(data)
Это должно напечатать что-то вроде
tensorflow.python.framework.ops.Tensor
Надеюсь это поможет :)
'
Ответ 4
hottbox.pdtools.utils (инструменты интеграции Pandas API HOTTBOX) предоставляет функции
pd_to_tensor(df[, keep_index])
tensor_to_pd(tensor[, col_name])
для конвертации в обоих направлениях.
Ответ 5
Вы можете использовать tf.estimator.inputs.pandas_input_fn
в вашей функции make_input_fn(X, y, num_epochs)
. Однако мне не удалось заставить его работать с мультииндексом. Я исправил эту проблему, превратив ее в стандартный целочисленный индекс, используя df.reset_index(drop=True)
Ответ 6
Вы можете преобразовать столбец dataframe в тензорный объект следующим образом:
tf.constant((df['column_name']))
Это должно вернуть вам тензорную переменную, которая выглядит примерно так:
<tf.Tensor: id=275634, shape=(48895,), dtype=float64, numpy=
array([1, 2, ...])>
Кроме того, вы можете рекламировать любое количество столбцов данных, как хотите:
tf.constant(([cdf['column1'], cdf['column2']]))
Надеюсь, это поможет.