bcl*_*man 5 python keras tensorflow tensorflow-datasets
我正在将Keras与Tensorflow后端结合使用来构建此问题的模型:https://www.kaggle.com/cfpb/us-consumer-finance-complaints (仅作练习)。
我使用tf.data.DatasetAPI 训练我的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()
Run Code Online (Sandbox Code Playgroud)
我的训练使用了tf.data.Dataset每个元素的形式,({'reviews': "movie was great"}, "positive")因此在这里我将其模仿为预测。另外,我的预处理只是将我的字符串变成Tensor整数a。
当我打电话时:
preds = model.predict(dataset)
Run Code Online (Sandbox Code Playgroud)
但有人告诉我我的predict电话失败了:
ValueError: When using iterators as input to a model, you should specify the `steps` argument.
Run Code Online (Sandbox Code Playgroud)
因此,我将此调用修改为:
preds = model.predict(dataset, steps=3)
Run Code Online (Sandbox Code Playgroud)
但是现在我回来了:
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)
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?预测时,我不必提供2个元素的元组(我不需要标签)。
谢谢你尽你所能的帮助!
您使用的是哪个版本的 Keras?我在代码库中找不到特定的错误消息,但我想我找到了它以前所在的位置。
这是我认为与您正在运行的版本接近的代码版本中的错误:commit
输入验证的条件已更改(在最新版本中,您的输入将被接受),但相关的是错误消息更加清晰:
raise ValueError(
'Please provide data as a list or tuple of 1, 2, or 3 elements '
' - `(input)`, or `(input, target)`, or `(input, target,'
'sample_weights)`. Received %s. We do not use the `target` or'
'`sample_weights` value here.' % inputs.output_shapes)
Run Code Online (Sandbox Code Playgroud)
预测函数中从未使用目标值,因此可以是任何值。查看函数的其余部分next_element[1]从来没有被使用过。
[ TLDR ] 使用您当前的版本,向数据添加虚拟目标值,或更新您的 Keras。
| 归档时间: |
|
| 查看次数: |
1448 次 |
| 最近记录: |