【问题标题】:ValueError: Value tf.Tensor.. shape=(), dtype=float64) has insufficient rank for batching.?ValueError: Value tf.Tensor.. shape=(), dtype=float64) has enough rank for batching.?
【发布时间】:2020-12-28 10:56:27
【问题描述】:

我正在尝试获取一个数据框并将它们转换为张量以在 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 是一个系列而不是多列。

对我能做什么有什么建议吗?

【问题讨论】:

    标签: python tensorflow keras


    【解决方案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.])>}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 2020-11-16
      • 2021-04-05
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 2019-04-11
      相关资源
      最近更新 更多