Обучение DNNRegressor с 2D-метками

#python #pandas #tensorflow #regression

#python #pandas #tensorflow #регрессия

Вопрос:

Я пытаюсь изучить DDNRegressor с 2D-метками:

 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())
  

но я застрял с ошибкой:

Ошибка типа: не удалось преобразовать объект типа < class ‘dict’> в Tensor. Содержимое: {‘coord_x’: < tf.Tensor ‘random_shuffle_queue_DequeueUpTo:9’ shape=(?,) dtype=float64 >, ‘coord_y’: < tf.Tensor ‘random_shuffle_queue_DequeueUpTo:10’ shape=(?,) dtype=float64 >}. Рассмотрим приведение элементов к поддерживаемому типу.

Каков правильный способ передачи 2D-меток из фрейма данных Pandas в tf.estimator.inputs.pandas_input_fn ?

Спасибо

Комментарии:

1. содержит ли ваш входной DF все числа? Библиотеки DL ожидают ввода числовых данных

2. @rock321987 Да, в моем фрейме данных есть только числа.

3. Согласно документам , будет выдана ошибка, если если x уже содержит столбец с тем же именем, что и y, или если индексы x и y не совпадают . Но ошибка, похоже, относится к типу данных.

4. @rock321987 Я попытался исключить столбцы, определив имена в x , но ошибка все та же. Я уверен, что имена x и y не пересекаются.

Ответ №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)