使用TensorFlow Estimator执行predict时出现Tensor秩不足无法batching错误如何解决
错误原因
报错的核心是tf.data.Dataset.from_tensor_slices的输入参数不符合维度要求:
- 你定义的
pred字典中所有特征值都是0维标量(shape为()),from_tensor_slices会默认对输入张量的第0维做切片生成单样本数据,0维张量不存在样本维度,切片后生成的数据集元素秩不足,调用batch方法时触发错误。 - TensorFlow Estimator要求输入函数返回的所有特征张量,第0位必须是样本维度,即使只有1个预测样本,也需要明确保留该维度。
解决方案
提供两种可直接落地的修改方案,按需选择即可:
方案1:修改输入特征字典(适配批量预测场景)
给每个特征值套一层列表,显式增加样本维度,单样本时每个列表长度为1,多批量预测时直接按顺序填入对应样本的特征值即可:
pred = {"Team1":[10764] , "Team1Rank":[51], "Team1Prediction":[17], "Team2":[8211], "Team2Rank":[81], "Team2Prediction":[1], "Odds1":[1.3], "Odds2":[3.2], "BestOf":[3] } def pred_fn(features, batch_size=960): db = tf.data.Dataset.from_tensor_slices(dict(features)).batch(batch_size) return db predictions = classifier.predict( input_fn=lambda: pred_fn(pred)) print(list(predictions))
方案2:调整数据集构造方法(适配单样本预测场景)
如果不需要修改原pred字典结构,可以把from_tensor_slices替换为from_tensors,直接将整组特征作为单个样本加载,无需切片操作:
pred = {"Team1":10764 , "Team1Rank":51, "Team1Prediction":17, "Team2":8211, "Team2Rank":81, "Team2Prediction":1, "Odds1":1.3, "Odds2":3.2, "BestOf":3 } def pred_fn(features, batch_size=960): db = tf.data.Dataset.from_tensors(dict(features)).batch(batch_size) return db predictions = classifier.predict( input_fn=lambda: pred_fn(pred)) print(list(predictions))
内容的提问来源于stack exchange,提问作者Kra1ven
相关产品推荐
相关产品推荐

