tensorflow.python.framework.errors\u impl.InvalidArgumentError:在[0,512]中预期大小为[0],但得到891[Op:Slice]

tensorflow.python.framework.errors\u impl.InvalidArgumentError:在[0,512]中预期大小为[0],但得到891[Op:Slice],python,tensorflow,bert-language-model,Python,Tensorflow,Bert Language Model,我正在读取存储在数据库中的文本文件,它们都有不同的大小。当我运行我的代码时,它突然停止并给出这个错误。没有找到任何相关的答案。 我已尝试更改max_seq_嵌入,但仍然不起作用。 当我遇到长度为3619的文件时,它就引发了一个错误 YES <class 'str'> 1814 YES <class 'str'> 1334 YES <class 'str'> 3619 Traceback (most recent call last): File "C:/U

我正在读取存储在数据库中的文本文件,它们都有不同的大小。当我运行我的代码时,它突然停止并给出这个错误。没有找到任何相关的答案。 我已尝试更改max_seq_嵌入,但仍然不起作用。 当我遇到长度为3619的文件时,它就引发了一个错误

YES <class 'str'> 1814
YES <class 'str'> 1334
YES <class 'str'> 3619
Traceback (most recent call last):
  File "C:/Users/DeLL/PycharmProjects/Phase1/venv/src/Main.py", line 24, in <module>
    output = model.predict(data.text)
  File "C:\Users\DeLL\PycharmProjects\Phase1\venv\src\bert.py", line 77, in predict
    logits = self.model(input_ids, segment_ids, input_mask,valid_ids)
  File "C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site-packages\tensorflow_core\python\keras\engine\base_layer.py", line 891, in __call__
    outputs = self.call(cast_inputs, *args, **kwargs)
  File "C:\Users\DeLL\PycharmProjects\Phase1\venv\src\model.py", line 55, in call
    sequence_output = self.bert([input_word_ids, input_mask, input_type_ids],**kwargs)
  File "C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site-packages\tensorflow_core\python\keras\engine\base_layer.py", line 891, in __call__
    outputs = self.call(cast_inputs, *args, **kwargs)
  File "C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site-packages\tensorflow_core\python\keras\engine\network.py", line 708, in call
    convert_kwargs_to_constants=base_layer_utils.call_context().saving)
  File "C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site-packages\tensorflow_core\python\keras\engine\network.py", line 860, in _run_internal_graph
    output_tensors = layer(computed_tensors, **kwargs)
  File "C:\Users\DeLL\PycharmProjects\Phase1\venv\src\bert_modeling.py", line 197, in __call__
    return super(BertModel, self).__call__(inputs, **kwargs)
  File "C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site-packages\tensorflow_core\python\keras\engine\base_layer.py", line 891, in __call__
    outputs = self.call(cast_inputs, *args, **kwargs)
  File "C:\Users\DeLL\PycharmProjects\Phase1\venv\src\bert_modeling.py", line 217, in call
    word_embeddings=word_embeddings, token_type_ids=input_type_ids)
  File "C:\Users\DeLL\PycharmProjects\Phase1\venv\src\bert_modeling.py", line 329, in __call__
    return super(EmbeddingPostprocessor, self).__call__(inputs, **kwargs)
  File "C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site-packages\tensorflow_core\python\keras\engine\base_layer.py", line 891, in __call__
    outputs = self.call(cast_inputs, *args, **kwargs)
  File "C:\Users\DeLL\PycharmProjects\Phase1\venv\src\bert_modeling.py", line 355, in call
    tf.slice(self.position_embeddings, [0, 0], [seq_length, width]),
  File "C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site-packages\tensorflow_core\python\ops\array_ops.py", line 866, in slice
    return gen_array_ops._slice(input_, begin, size, name=name)
  File "C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site-packages\tensorflow_core\python\ops\gen_array_ops.py", line 9212, in _slice
    input, begin, size, name=name, ctx=_ctx)
  File "C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site-packages\tensorflow_core\python\ops\gen_array_ops.py", line 9251, in _slice_eager_fallback
    ctx=_ctx, name=name)
  File "C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site-packages\tensorflow_core\python\eager\execute.py", line 67, in quick_execute
    six.raise_from(core._status_to_exception(e.code, message), None)
  File "<string>", line 3, in raise_from
tensorflow.python.framework.errors_impl.InvalidArgumentError: Expected size[0] in [0, 512], but got 891 [Op:Slice]

Process finished with exit code 1
是1814
是1334
是3619
回溯(最近一次呼叫最后一次):
文件“C:/Users/DeLL/PycharmProjects/Phase1/venv/src/Main.py”,第24行,在
输出=model.predict(data.text)
文件“C:\Users\DeLL\PycharmProjects\Phase1\venv\src\bert.py”,第77行,在predict中
logits=self.model(输入\标识、段\标识、输入\掩码、有效\标识)
文件“C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site packages\tensorflow\u core\python\keras\engine\base\u layer.py”,第891行,在调用中__
输出=self.call(强制转换输入,*args,**kwargs)
文件“C:\Users\DeLL\PycharmProjects\Phase1\venv\src\model.py”,第55行,在调用中
sequence\u output=self.bert([input\u word\u id,input\u mask,input\u type\u id],**kwargs)
文件“C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site packages\tensorflow\u core\python\keras\engine\base\u layer.py”,第891行,在调用中__
输出=self.call(强制转换输入,*args,**kwargs)
文件“C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site packages\tensorflow\u core\python\keras\engine\network.py”,第708行,在调用中
将\u kwargs\u转换为\u常量=基本\u层\u utils.call\u context().saving)
文件“C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site packages\tensorflow\u core\python\keras\engine\network.py”,第860行,在内部运行图中
输出张量=层(计算张量,**kwargs)
文件“C:\Users\DeLL\PycharmProjects\Phase1\venv\src\bert\u modeling.py”,第197行,在调用中__
返回超级(BertModel,self)。\调用(输入,**kwargs)
文件“C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site packages\tensorflow\u core\python\keras\engine\base\u layer.py”,第891行,在调用中__
输出=self.call(强制转换输入,*args,**kwargs)
文件“C:\Users\DeLL\PycharmProjects\Phase1\venv\src\bert\u modeling.py”,第217行,在call中
word\u嵌入=word\u嵌入,令牌\u类型\u ID=输入\u类型\u ID)
文件“C:\Users\DeLL\PycharmProjects\Phase1\venv\src\bert\u modeling.py”,第329行,在调用中__
返回super(嵌入式后处理器,self)。\u调用(输入,**kwargs)
文件“C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site packages\tensorflow\u core\python\keras\engine\base\u layer.py”,第891行,在调用中__
输出=self.call(强制转换输入,*args,**kwargs)
文件“C:\Users\DeLL\PycharmProjects\Phase1\venv\src\bert_modeling.py”,第355行,在调用中
tf.切片(自位置嵌入[0,0],[seq_长度,宽度],
文件“C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site packages\tensorflow\u core\python\ops\array\u ops.py”,第866行,切片
返回gen\u数组操作。\u切片(输入、开始、大小、名称=名称)
文件“C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site packages\tensorflow\u core\python\ops\gen\u array\u ops.py”,第9212行,在片中
输入,开始,大小,名称=名称,ctx=_ctx)
文件“C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site packages\tensorflow\u core\python\ops\gen\u array\u ops.py”,第9251行,位于“切片”应急计划中
ctx=_ctx,name=name)
文件“C:\Users\DeLL\PycharmProjects\Phase1\venv\lib\site packages\tensorflow\u core\python\eager\execute.py”,第67行,快速执行
六、将_从(核心状态)提升到_异常(例如代码、消息),无
文件“”,第3行,从
tensorflow.python.framework.errors\u impl.InvalidArgumentError:在[0,512]中预期大小为[0],但得到891[Op:Slice]
进程已完成,退出代码为1
这里是所有使用的文件的链接。 您正在程序中使用的
tf.slice
接受以下参数-

tf.slice(
    input_, begin, size, name=None
)
正如错误明确指出的那样,
size
参数期望值的范围是
[0512]
,但得到了
891

size
的范围取决于
begin
参数,如果
begin
0
,则输入的完整长度为
size
<代码>大小可以在
[0,len(输入)]
范围内取值,否则如果
开始
参数设置大于
0
,则
大小
可以在
[begin,len(输入)-开始]
范围内取值

让我举例说明-

示例1:我在这里设置了
begin=[5]
size=[5]
,这意味着对于5号的大小,从第5位开始

x = tf.constant(("a","b","c","d","e","f","g","h","i","j"))
print(x)
y = tf.slice(x, [5], [5])
print(y)
输出-

tf.Tensor([b'a' b'b' b'c' b'd' b'e' b'f' b'g' b'h' b'i' b'j'], shape=(10,), dtype=string)
tf.Tensor([b'f' b'g' b'h' b'i' b'j'], shape=(5,), dtype=string)
tf.Tensor([b'a' b'b' b'c' b'd' b'e' b'f' b'g' b'h' b'i' b'j'], shape=(10,), dtype=string)
---------------------------------------------------------------------------
_FallbackException                        Traceback (most recent call last)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/gen_array_ops.py in _slice(input, begin, size, name)
   9082         _ctx._context_handle, tld.device_name, "Slice", name,
-> 9083         tld.op_callbacks, input, begin, size)
   9084       return _result

_FallbackException: This function does not handle the case of the path where all inputs are not already EagerTensors.

During handling of the above exception, another exception occurred:

InvalidArgumentError                      Traceback (most recent call last)
4 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
     58     ctx.ensure_initialized()
     59     tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
---> 60                                         inputs, attrs, num_outputs)
     61   except core._NotOkStatusException as e:
     62     if name is not None:

InvalidArgumentError: Expected size[0] in [0, 5], but got 10 [Op:Slice]
示例2:我在这里设置了
begin=[5]
size=[10]
,这意味着对于10号的尺寸,从第5位开始。但是作为
begin=[5]
我在
size=[5]
之后没有任何输入,因为输入的形状是
shape=(10,)
这将重现您面临的错误。

x = tf.constant(("a","b","c","d","e","f","g","h","i","j"))
print(x)
y = tf.slice(x, [5], [10])
print(y)
输出-

tf.Tensor([b'a' b'b' b'c' b'd' b'e' b'f' b'g' b'h' b'i' b'j'], shape=(10,), dtype=string)
tf.Tensor([b'f' b'g' b'h' b'i' b'j'], shape=(5,), dtype=string)
tf.Tensor([b'a' b'b' b'c' b'd' b'e' b'f' b'g' b'h' b'i' b'j'], shape=(10,), dtype=string)
---------------------------------------------------------------------------
_FallbackException                        Traceback (most recent call last)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/gen_array_ops.py in _slice(input, begin, size, name)
   9082         _ctx._context_handle, tld.device_name, "Slice", name,
-> 9083         tld.op_callbacks, input, begin, size)
   9084       return _result

_FallbackException: This function does not handle the case of the path where all inputs are not already EagerTensors.

During handling of the above exception, another exception occurred:

InvalidArgumentError                      Traceback (most recent call last)
4 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
     58     ctx.ensure_initialized()
     59     tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
---> 60                                         inputs, attrs, num_outputs)
     61   except core._NotOkStatusException as e:
     62     if name is not None:

InvalidArgumentError: Expected size[0] in [0, 5], but got 10 [Op:Slice]

希望这能回答你的问题。快乐学习。

@Kushal Vijay-希望我们已经回答了您的问题。如果您对答案感到满意,请接受并投票。谢谢@Tensorflow Warrior。你的回答帮助我解决了这个问题。