【发布时间】:2022-08-19 02:50:45
【问题描述】:
我正在尝试批量预测我的模型的一些输入,该模型需要一个包含 2 个固定大小的 1D 列表的输入,如下所示:
[<tf.Tensor: shape=(1, 150), dtype=int64, numpy=array([[2, 924, ...]])>, <tf.Tensor: shape=(1, 150), dtype=int64, numpy=array([[2, 130, ...]])>]
假设这个输入被称为 input_in,我可以通过编写来预测一个样本:
transformer.predict(input_in)
因此 input_in 具有以下形状:
(2, 1, 150)
这有效。但是,我无法理解传递给 predict() 以一次预测多个预测所需的输入。直观地说,形状必须是这样的:
(X, 2, 1, 150)
其中 X 是要通过的预测数。
我试过这个,但我收到一个错误:
transformer.predict([input_in, input_in, input_in]) ValueError: in user code: File \"/usr/local/lib/python3.8/dist-packages/keras/engine/training.py\", line 1801, in predict_function * return step_function(self, iterator) File \"/usr/local/lib/python3.8/dist-packages/keras/engine/training.py\", line 1790, in step_function ** outputs = model.distribute_strategy.run(run_step, args=(data,)) File \"/usr/local/lib/python3.8/dist-packages/keras/engine/training.py\", line 1783, in run_step ** outputs = model.predict_step(data) File \"/usr/local/lib/python3.8/dist-packages/keras/engine/training.py\", line 1751, in predict_step return self(x, training=False) File \"/usr/local/lib/python3.8/dist-packages/keras/utils/traceback_utils.py\", line 67, in error_handler raise e.with_traceback(filtered_tb) from None File \"/usr/local/lib/python3.8/dist-packages/keras/engine/input_spec.py\", line 200, in assert_input_compatibility raise ValueError(f\'Layer \"{layer_name}\" expects {len(input_spec)} input(s),\' ValueError: Layer \"transformer\" expects 2 input(s), but it received 6 input tensors. Inputs received: [<tf.Tensor \'IteratorGetNext:0\' shape=(None, 12) dtype=int64>, <tf.Tensor \'IteratorGetNext:1\' shape=(None, 1) dtype=int64>, <tf.Tensor \'IteratorGetNext:2\' shape=(None, 12) dtype=int64>, <tf.Tensor \'IteratorGetNext:3\' shape=(None, 1) dtype=int64>, <tf.Tensor \'IteratorGetNext:4\' shape=(None, 12) dtype=int64>, <tf.Tensor \'IteratorGetNext:5\' shape=(None, 1) dtype=int64>]有趣的是,如果我尝试预测一个输入但只是将输入更改为张量,我也会得到类似的错误:
transformer_test.predict(tf.convert_to_tensor([input_tensor,output_tensor])) -> ValueError: Layer \"transformer\" expects 2 input(s), but it received 1 input tensors. Inputs received: [<tf.Tensor \'IteratorGetNext:0\' shape=(None, 1, 150) dtype=int64>]有什么建议么?
编辑:我的 Transformer 模型如下所示:
我还复制了该问题的最小版本:https://colab.research.google.com/drive/1xYNjLURQcGPIXeWV-xo4_iA09KDJvNfi?usp=sharing
如果全部运行,最后 2 个单元格会出错。我一直在尝试使用批量预测的输入,但似乎没有任何效果......
-
这意味着您的 input_ids 都是不同的形状,您是否将输入传递给标记器以对其进行标准化?
-
@EdwinCheong 你是对的,已修复,现在它们都被填充到相同的长度。但是我仍然不知道这个所需的形状并且仍然得到同样的错误......我现在编辑了这个问题
-
@Kurt 你的
transformer型号是什么?你得到的错误的完整堆栈跟踪是什么? -
@thushv89 使用 model.summary() 的屏幕截图(出于格式化目的)和完整的堆栈跟踪更新了问题...希望没问题 :)
-
我还更新了问题以包含一个展示错误的 colab 链接。
标签: python tensorflow machine-learning nlp tf.keras