Ошибка значения: Значение tf.Tensor.. shape=(), dtype=float64) имеет недостаточный ранг для пакетной обработки.?

#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.])>}