我正在使用Tensorflow后端的Keras构建模型来解决这个问题:https://www.kaggle.com/cfpb/us-consumer-finance-complaints(只是练习)。
我使用
我的训练使用了
当我调用:
但现在我收到了回复:
我使用
tf.data.Dataset
API训练我的Keras模型。现在,我有一个Pandas DataFrame,df_testing
,其列为complaint
(字符串)和label
(也是字符串)。我想要对这些新样本进行预测。我创建了一个tf.data.Dataset
对象,执行预处理,创建一个迭代器,并在我的模型上调用预测:data = df_testing["complaint"].values
labels = df_testing["label"].values
dataset = tf.data.Dataset.from_tensor_slices((data))
dataset = dataset.map(lambda x: ({'reviews': x}))
dataset = dataset.batch(self.batch_size).repeat()
dataset = dataset.map(lambda x: self.preprocess_text(x, self.data_table))
dataset = dataset.map(lambda x: x['reviews'])
dataset = dataset.make_initializable_iterator()
我的训练使用了
tf.data.Dataset
,每个元素形如 ({'reviews': "电影很棒"}, "积极")
,所以我在这里为预测模仿该方法。此外,我的预处理只是将字符串转换为整数的Tensor
。当我调用:
preds = model.predict(dataset)
但是我被告知我的 predict
调用失败:
ValueError: When using iterators as input to a model, you should specify the `steps` argument.
所以我将这个调用修改为:
preds = model.predict(dataset, steps=3)
但现在我收到了回复:
ValueError: Please provide data as a list or tuple of 2 elements - input and target pair. Received Tensor("IteratorGetNext_2:0", shape=(?, 100), dtype=int32)
我在这里做错了什么?当预测时,我不应该提供一个包含 2 个元素的元组(我不需要标签)。
感谢您能提供的任何帮助!
.batch(..).repeat()
之后对数据集进行后处理有关。 - Roy Shilkrot