【问题标题】:Training DNNRegressor with 2D labels使用 2D 标签训练 DNNRegressor
【发布时间】:2023-11-17 04:28:01
【问题描述】:

我正在尝试学习带有 2D 标签的 DDNRegressor:

estimator = tf.estimator.DNNRegressor(
    hidden_units=[10,10],
    feature_columns=feature_columns, 
    label_dimension=2
)

def train_input_fn():
    return tf.estimator.inputs.pandas_input_fn(
        x = train_df,
        y = train_df[["coord_x", "coord_y"]],
        batch_size=100,
        num_epochs=1000,
        shuffle=True
    )

estimator.train(input_fn=train_input_fn())

但我卡住了错误:

TypeError: 无法将 类型的对象转换为张量。内容:{'coord_x': , 'coord_y': }。考虑将元素转换为支持的类型。

将二维标签从 Pandas DataFrame 传递到 tf.estimator.inputs.pandas_input_fn 的正确方法是什么?

谢谢

【问题讨论】:

  • 您的输入 DF 是否包含所有数字? DL 库需要数字输入
  • @rock321987 是的,我的 DataFrame 中只有数字。
  • 根据docs,如果 如果 x 已经包含与 y 同名的列,或者 x 和 y 的索引不匹配,则会引发错误乙>。但错误似乎与数据类型有关。
  • @rock321987 我尝试通过在x 中定义名称来排除列,但错误仍然相同。我确定xy 的名称没有交集。

标签: python pandas tensorflow regression


【解决方案1】:

我找到了一种解决方法,但我并不完全满意。仍在寻找使用tf.estimator.inputs.pandas_input_fn 的正确方法。

    def train_input_fn():
        features = {
            "rssi_x1": train_df["rssi_x1"].values.tolist(),
            "rssi_x2": train_df["rssi_x2"].values.tolist(),
            "rssi_y1": train_df["rssi_y1"].values.tolist(),
            "rssi_y2": train_df["rssi_y2"].values.tolist()
        }
        labels = train_df[["coord_x", "coord_y"]].values.tolist()

        dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))
        dataset = dataset.shuffle(1000).repeat().batch(100)
        return dataset   

    estimator.train(input_fn=train_input_fn, steps=90000)

【讨论】: