我正在学习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
)时,它可以完美地运行。我究竟做错了什么?先感谢您!
这可能是因为您的标签是int64类型。将它们转换为float32
train_y = pd.Series(train_y , index=np.array(range(1, train_y.shape[0] + 1)), dtype=np.float32)