tensorflow.python.framework.errors_impl.InvalidArgumentError: Expected size[0] in [0, 512], but got 891 [Op:Slice]
tensorflow.python.framework.errors_impl.InvalidArgumentError: Expected size[0] in [0, 512], but got 891 [Op:Slice]
我正在读取存储在我的数据库中的文本文件,它们都有不同的大小。当我 运行 我的代码突然停止并给出这个错误。在任何地方都找不到任何相关答案。
我已经尝试更改 max_seq_embeddings 但仍然无效。
一旦我遇到长度为 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
这里是 link 所有使用的文件。
https://github.com/kamalkraj/BERT-NER-TF
您正在您的程序中使用 tf.slice。 tf.slice
接受以下参数 -
tf.slice(
input_, begin, size, name=None
)
正如错误明确指出的那样,size
参数需要 [0, 512]
范围内的值,但得到了 891
。
size
的范围取决于 begin
参数,如果 begin
是 0
那么你有完整的输入长度 size
.i.e. size
可以取值范围 [0,len(input)]
,否则如果 begin
参数设置大于 0
,那么 size
取值范围 [Begin, len(input)-Begin]
.
让我举个例子解释一下-
示例 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)
示例 2: 这里我设置了 begin=[5]
和 size=[10]
,意思是从第 5 个位置开始,大小为 10。但是作为 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)
---------------------------------------------------------------------------
_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]
希望这能回答您的问题。快乐学习。
我正在读取存储在我的数据库中的文本文件,它们都有不同的大小。当我 运行 我的代码突然停止并给出这个错误。在任何地方都找不到任何相关答案。 我已经尝试更改 max_seq_embeddings 但仍然无效。 一旦我遇到长度为 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
这里是 link 所有使用的文件。 https://github.com/kamalkraj/BERT-NER-TF
您正在您的程序中使用 tf.slice。 tf.slice
接受以下参数 -
tf.slice(
input_, begin, size, name=None
)
正如错误明确指出的那样,size
参数需要 [0, 512]
范围内的值,但得到了 891
。
size
的范围取决于 begin
参数,如果 begin
是 0
那么你有完整的输入长度 size
.i.e. size
可以取值范围 [0,len(input)]
,否则如果 begin
参数设置大于 0
,那么 size
取值范围 [Begin, len(input)-Begin]
.
让我举个例子解释一下-
示例 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)
示例 2: 这里我设置了 begin=[5]
和 size=[10]
,意思是从第 5 个位置开始,大小为 10。但是作为 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)
---------------------------------------------------------------------------
_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]
希望这能回答您的问题。快乐学习。