在Tensorflow中训练`BoostedTreesClassifier`?

时间:2018-06-04 19:45:32

标签: python-3.x tensorflow

我正在学习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)时,它的效果非常好。我究竟做错了什么?提前谢谢!

1 个答案:

答案 0 :(得分:0)

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

train_y = pd.Series(train_y , index=np.array(range(1, train_y.shape[0] + 1)), dtype=np.float32)