-
Notifications
You must be signed in to change notification settings - Fork 25.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Remove value error #8985
Remove value error #8985
Conversation
Could you elaborate on the use case? It seems dangerous and magical to me. When passing a parameter to a function that is not in the signature, the user gets a |
Sure! an EagerTensor doesn't have a This is very picky, and I won't fight at all if not accepted ahah |
Mmm, but in this test we're not eager tensors since there is a |
While I was trying to explain this, a use case came to my mind, and indeed this behavior is not correct for an edge use case:
We get:
Which is normal because |
Thanks for explaining, I understand better now :-) |
Ok,just realized it is even worse, the inputs gets an ID, here |
Ok, as long as we are naming the inputs accordingly to the parameters, the order is safe. For example:
Is perfectly fine and works as expected, but:
Brings an undefined behavior into the order. Nevertheless, there is still an issue. Let's imagine this case:
Won't work because internally, the What do you think? |
I think we should document that this does not work and encourage users to use named inputs then. |
I have completed the documentation of the |
LGTM! |
@@ -365,9 +367,7 @@ def input_processing(func, config, input_ids, **kwargs): | |||
if tensor_name in parameter_names: | |||
output[tensor_name] = input | |||
else: | |||
raise ValueError( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
from the comment that was added above it seems like the tensor_name
has to be in parameter_names
no? But we still allow tensors without any parameter name?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should we then maybe at least raise a warning here at the moment? And extend the functions docstring with a sentence that there might be unexpected behavior if the inputs have no names?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As you can see in the example, the tensors during explicite model creation cannot have a name that belongs to any parameter name. So yes we allow tensors that have a different name than the parameters. But, the input names must have a name that belongs to the parameters in order to be able to have a proper order in the list. It is more obvious when reading the full example above.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@patrickvonplaten I have updated the comment in order to make it clearer. Does-it sounds more understandable for you? I think there was a confusion between the terms symbolic input and tensor.
@@ -365,9 +367,7 @@ def input_processing(func, config, input_ids, **kwargs): | |||
if tensor_name in parameter_names: | |||
output[tensor_name] = input | |||
else: | |||
raise ValueError( | |||
f"The tensor named {input.name} does not belong to the authorized list of names {parameter_names}." | |||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should we instead raise a warning here maybe?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No need of an error or warning, as now, we allow tensors that have a different name. We don't have the choice because all the tensors that will be represented by a symbolic input simply cannot have a name that belongs to the parameters. So basically a warning will be raised everytime you will use a tf.data.dataset and for each batch of the dataset, it will simply pollute your standard output for nothing.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
More specifically in the example given here #8985 (comment)
the symbolic inputs are:
input_ids = tf.keras.Input(shape=(128,), dtype='int32', name="input_ids")
attention_mask = tf.keras.Input(shape=(128, ), dtype='int32', name="attention_mask")
And the tensors that represents there symbolic inputs are respectively named IteratorGetNext:0
and IteratorGetNext:1
and these two names cannot be changed.
LGTM! @LysandreJik feel free to merge if the PR gets your approval! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK!
What does this PR do?
This PR update the behavior of the input. We should not raise an error if the name is not among the parameters but act like if there was no name, this is more elegant and less annoying.