在Tensorflow中训练`BoostedTreesClassifier`?

问题描述 投票:1回答:1

我正在学习TensorFlow,我正在尝试训练一个BoostedTreesClassifier(预制估算器)。但是,我不能让它与我的bucketized列一起工作。下面是我的bucketized列:

age_bucket_column = tf.feature_column.bucketized_column(tf.numeric_column(key='age'), [20, 40, 60])

这是我的火车输入功能(注意功能是Pandas DataFrame):

def train_input_fn(features, labels, batch_size):
  dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))
  dataset = dataset.shuffle(buffer_size=1000).repeat(count=None).batch(batch_size)

  return dataset.make_one_shot_iterator().get_next()

这是我的估算师:

boosted_trees_classifier = tf.estimator.BoostedTreesClassifier(
  feature_columns=[age_bucket_column],
  n_batches_per_layer=100
)

这是我训练它的代码:

classifier.train(
  input_fn=lambda: train_input_fn(train_X, train_y, 100),
  steps=1000
)

但是,当我运行它时,我收到以下错误:ValueError: Tensor conversion requested dtype float32 for Tensor with dtype int64: 'Tensor("IteratorGetNext:13", shape=(?,), dtype=int64, device=/device:CPU:0)'

请注意,当我运行相同的代码但使用另一个模型(比如LinearClassifierDNNClassifier)时,它可以完美地运行。我究竟做错了什么?先感谢您!

python-3.x tensorflow
1个回答
0
投票

这可能是因为您的标签是int64类型。将它们转换为float32

train_y = pd.Series(train_y , index=np.array(range(1, train_y.shape[0] + 1)), dtype=np.float32)
© www.soinside.com 2019 - 2024. All rights reserved.