#python #tensorflow #keras
#python #tensorflow #keras
Вопрос:
Я пытаюсь взять фрейм данных и преобразовать их в тензоры для обучения модели в keras.
Я думаю, что это срабатывает, когда я преобразую свою метку Y в тензор:
X_train = df_train1.drop(variableToPredict, axis=1)
y_train = df_train1[variableToPredict].copy()
X_train=tf.data.Dataset.from_tensor_slices(dict(X_train))
y_train=tf.data.Dataset.from_tensor_slices(dict(y_train))
Я получаю следующую ошибку при приведении y_train к тензору из срезов:
ValueError: Value tf.Tensor(0.10559591064345274, shape=(), dtype=float64) has insufficient rank for batching.
В руководствах это, кажется, работает, но я думаю, что в этих руководствах выполняются многоклассовые классификации, тогда как я выполняю регрессию, поэтому y_train — это серия, а не несколько столбцов.
Любые предложения о том, что я могу сделать?
Ответ №1:
Либо используйте:
y = tf.data.Dataset.from_tensors(dict(y_train))
Или это:
y = tf.data.Dataset.from_tensor_slices(y_train)
Или просто используйте двойные скобки, чтобы ваш фрейм данных оставался фреймом данных, тогда вам не нужно будет ничего менять:
y_train = df[['height']].copy()
y = tf.data.Dataset.from_tensor_slices(dict(y_train))
Полный код, воспроизводящий проблему, с альтернативами:
import tensorflow as tf
import pandas as pd
df = pd.DataFrame(data={'integers': [1, 2, 3, 4], 'floats': [4., 3., 2., 1]})
y_train = df['floats'].copy()
y = tf.data.Dataset.from_tensor_slices(dict(y_train)) # not good
y = tf.data.Dataset.from_tensor_slices(y_train) # good
print(next(iter(y)))
y = tf.data.Dataset.from_tensors(y_train) # good
print(next(iter(y)))
y_train = df[['floats']].copy()
y = tf.data.Dataset.from_tensor_slices(dict(y_train)) # good
next(iter(y))
{'floats': <tf.Tensor: shape=(4,), dtype=float64, numpy=array([5., 4., 3., 2.])>}