我正在学习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)'
请注意,当我运行相同的代码但使用其他模型(比如LinearClassifier
或DNNClassifier
)时,它的效果非常好。我究竟做错了什么?提前谢谢!
答案 0 :(得分:0)
这可能是因为标签的类型为int64。将它们转换为float32
train_y = pd.Series(train_y , index=np.array(range(1, train_y.shape[0] + 1)), dtype=np.float32)