Skip to content

Conversation

@LarsKue
Copy link
Contributor

@LarsKue LarsKue commented May 31, 2024

This allows passing atol and rtol. Should work under all backends.

I haven't found my way around the test suite yet. Is there a good place to implement a unit test for this?

this allows passing atol and rtol
@codecov-commenter
Copy link

codecov-commenter commented May 31, 2024

Codecov Report

Attention: Patch coverage is 88.88889% with 2 lines in your changes missing coverage. Please review.

Project coverage is 78.73%. Comparing base (a1bbbc5) to head (fc45e87).
Report is 322 commits behind head on master.

Files with missing lines Patch % Lines
keras/src/backend/tensorflow/numpy.py 66.66% 1 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master   #19782      +/-   ##
==========================================
+ Coverage   78.71%   78.73%   +0.01%     
==========================================
  Files         498      498              
  Lines       45760    45801      +41     
  Branches     8429     8439      +10     
==========================================
+ Hits        36020    36061      +41     
  Misses       8042     8042              
  Partials     1698     1698              
Flag Coverage Δ
keras 78.59% <88.88%> (+0.02%) ⬆️
keras-jax 62.28% <61.11%> (+0.05%) ⬆️
keras-numpy 56.51% <66.66%> (+0.07%) ⬆️
keras-tensorflow 63.56% <66.66%> (+0.06%) ⬆️
keras-torch 62.25% <61.11%> (-0.05%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@fchollet
Copy link
Collaborator

Thanks for the PR. If we want to support atol and rtol, we should explicitly add them to the call() signature of the operation class and to the isclose function signature, rather than using kwargs.

@LarsKue
Copy link
Contributor Author

LarsKue commented Jun 3, 2024

@fchollet Thanks for the suggestion. I changed this now.

@LarsKue
Copy link
Contributor Author

LarsKue commented Jun 3, 2024

Had to shorten the line lengths a bit to pass the linter (80 characters is quite strict).

class Isclose(Operation):
def call(self, x1, x2):
return backend.numpy.isclose(x1, x2)
def call(self, x1, x2, rtol=1e-5, atol=1e-8, equal_nan=False):
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you change the signature in keras.ops, you need to change the backend function for all 4 backends, not just numpy.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Of course, silly mistake. I am still finding my way into the library. Fixed now!

@LarsKue
Copy link
Contributor Author

LarsKue commented Jun 4, 2024

I adjusted the tensorflow version of keras.ops.isclose to use tensorflow.experimental.numpy.isclose. Even though this api is within experimental, I assume it is stable enough to use as-is. Happy to revert this, though, if there is a good reason to.

Edit: I reverted it because it failed the tests.

LarsKue added 3 commits June 4, 2024 11:33
tensorflow version now uses code inspired from tf.experimental.numpy.isclose
@LarsKue LarsKue requested a review from fchollet June 5, 2024 11:24
Copy link
Collaborator

@fchollet fchollet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thank you!

@google-ml-butler google-ml-butler bot added kokoro:force-run ready to pull Ready to be merged into the codebase labels Jun 6, 2024
@fchollet fchollet merged commit 13ac85c into keras-team:master Jun 6, 2024
@google-ml-butler google-ml-butler bot removed awaiting review ready to pull Ready to be merged into the codebase kokoro:force-run labels Jun 6, 2024
james77777778 pushed a commit to james77777778/keras that referenced this pull request Jun 15, 2024
Fix `LayerNormalization.get_config` (keras-team#19807)

Propagate kwargs through `keras.ops.isclose` (keras-team#19782)

* propagate kwargs through isclose
this allows passing atol and rtol

* switch isclose **kwargs to explicit kwargs

* reduce line lengths

* fix ops.isclose signature

* fix ops.IsClose compute_output_spec signature

* implement isclose rtol atol equal_nan args for all backends

* shorten line lengths again

* revert using tf.experimental.numpy.isclose
tensorflow version now uses code inspired from tf.experimental.numpy.isclose

* fix lint

* add docs for new parameters

Faster in_top_k implementation for Jax backend (keras-team#19814)

* Faster in_top_k implementation.

* Fix bug in rank computation.

Fix CI

Fix TypeError in `Lambda.from_config` (keras-team#19827)

fixing dmtree.is_nested() and parameterized tree test (keras-team#19822)

Fix `keras.ops.repeat` cannot return an expected shape when `x` is a … (keras-team#19826)

* Fix `keras.ops.repeat` cannot return an expected shape when `x` is a `KerasTensor` and the `axis` is `None`

* Test dynamic is still dynamic after repetition

* Improve error messages

`Metric.variables` is now recursive. (keras-team#19830)

This allows it to surface variables from metrics nested at any depth.

Previously, metrics within metrics within metrics would not have their variables tracked in JAX, causing them to not be updated.

Fix `get_file` when the HTTP response has no `Content-Length` header (keras-team#19833)

Add `ops.switch` (keras-team#19834)

* Add `ops.switch`

* Update tests

* Fix out-of-bound issue

* Revert `torch.cond`

Use `absl.testing.parameterized` for `tree_test.py`. (keras-team#19842)

For consistency, use `absl.testing.parameterized` instead of `parameterized` for `tree_test.py` since that is used for all other tests.

It's one less dependency. It also says `optree` or `dmtree` in each test name.

Make batch norm mask shape error more descriptive (keras-team#19829)

* Made batch norm mask shape error more descriptive

* Added shape info in mask error message to help with degugging

Fix code style

doc: `ops.slice` (keras-team#19843)

corrected the example code in unit_normalization.py (keras-team#19845)

Added missing closing bracket and exact output value in example code after replicating the code.

Adjust code example

Add `training` argument to `Model.compute_loss()`. (keras-team#19840)

This allows models to perform different computations during training and evaluation. For instance, some expensive to compute metrics can be skipped during training and only computed during evaluation.

Note that backwards compatibility with overrides that do not have the `training` argument is maintained.

Fix the compatibility issues of `Orthogonal` and `GRU` (keras-team#19844)

* Add legacy `Orthogonal` class name

* Add legacy `implementation` arg to `GRU`

Fix inconsistent behavior of `losses.sparse_categorical_crossentropy`… (keras-team#19838)

* Fix inconsistent behavior of `losses.sparse_categorical_crossentropy` with and without `ignore_class`

* Test

* chore(format)

* Fix tests in `losses`

Fix bugs with `Mean`, `Accuracy` and `BinaryAccuracy` metrics. (keras-team#19847)

- `reduce_to_samplewise_values` would not reduce `sample_weights` correctly because the number of dimensions of `values` was checked.
- `reduce_to_samplewise_values` needs to explicitely broadcast `sample_weights`. Before, it was implicitly broadcast in the multiplication with `values`. However, the explicit broadcast is needed for the computation of `num_samples` for the averaging to be correct. This causes a bug when `sample_weights` is of rank 2 or more and a broadcast happens when doing the multiplication. This logic existed in `tf_keras`: https://github.com/keras-team/tf-keras/blob/master/tf_keras/metrics/base_metric.py#L508
- `Accuracy` and `BinaryAccuracy` were doing a mean reduction too early, before multiplying by `sample_weights`. This matters when the rank of `sample_weights` is the same as `y_true` and `y_pred`.

Add tests for `DTypePolicyMap`

Fix test

Update the logic of `default_policy`

Improve serialization of `DTypePolicyMap`

Improve `__repr__` and `__eq__`

Add `custom_gradient` for the numpy backend (keras-team#19849)

fix variable name when add in init function (keras-team#19853)

Address comments
james77777778 pushed a commit to james77777778/keras that referenced this pull request Jun 15, 2024
Introduce `DTypePolicyMap`

Fix `LayerNormalization.get_config` (keras-team#19807)

Propagate kwargs through `keras.ops.isclose` (keras-team#19782)

* propagate kwargs through isclose
this allows passing atol and rtol

* switch isclose **kwargs to explicit kwargs

* reduce line lengths

* fix ops.isclose signature

* fix ops.IsClose compute_output_spec signature

* implement isclose rtol atol equal_nan args for all backends

* shorten line lengths again

* revert using tf.experimental.numpy.isclose
tensorflow version now uses code inspired from tf.experimental.numpy.isclose

* fix lint

* add docs for new parameters

Faster in_top_k implementation for Jax backend (keras-team#19814)

* Faster in_top_k implementation.

* Fix bug in rank computation.

Fix CI

Fix TypeError in `Lambda.from_config` (keras-team#19827)

fixing dmtree.is_nested() and parameterized tree test (keras-team#19822)

Fix `keras.ops.repeat` cannot return an expected shape when `x` is a … (keras-team#19826)

* Fix `keras.ops.repeat` cannot return an expected shape when `x` is a `KerasTensor` and the `axis` is `None`

* Test dynamic is still dynamic after repetition

* Improve error messages

`Metric.variables` is now recursive. (keras-team#19830)

This allows it to surface variables from metrics nested at any depth.

Previously, metrics within metrics within metrics would not have their variables tracked in JAX, causing them to not be updated.

Fix `get_file` when the HTTP response has no `Content-Length` header (keras-team#19833)

Add `ops.switch` (keras-team#19834)

* Add `ops.switch`

* Update tests

* Fix out-of-bound issue

* Revert `torch.cond`

Use `absl.testing.parameterized` for `tree_test.py`. (keras-team#19842)

For consistency, use `absl.testing.parameterized` instead of `parameterized` for `tree_test.py` since that is used for all other tests.

It's one less dependency. It also says `optree` or `dmtree` in each test name.

Make batch norm mask shape error more descriptive (keras-team#19829)

* Made batch norm mask shape error more descriptive

* Added shape info in mask error message to help with degugging

Fix code style

doc: `ops.slice` (keras-team#19843)

corrected the example code in unit_normalization.py (keras-team#19845)

Added missing closing bracket and exact output value in example code after replicating the code.

Adjust code example

Add `training` argument to `Model.compute_loss()`. (keras-team#19840)

This allows models to perform different computations during training and evaluation. For instance, some expensive to compute metrics can be skipped during training and only computed during evaluation.

Note that backwards compatibility with overrides that do not have the `training` argument is maintained.

Fix the compatibility issues of `Orthogonal` and `GRU` (keras-team#19844)

* Add legacy `Orthogonal` class name

* Add legacy `implementation` arg to `GRU`

Fix inconsistent behavior of `losses.sparse_categorical_crossentropy`… (keras-team#19838)

* Fix inconsistent behavior of `losses.sparse_categorical_crossentropy` with and without `ignore_class`

* Test

* chore(format)

* Fix tests in `losses`

Fix bugs with `Mean`, `Accuracy` and `BinaryAccuracy` metrics. (keras-team#19847)

- `reduce_to_samplewise_values` would not reduce `sample_weights` correctly because the number of dimensions of `values` was checked.
- `reduce_to_samplewise_values` needs to explicitely broadcast `sample_weights`. Before, it was implicitly broadcast in the multiplication with `values`. However, the explicit broadcast is needed for the computation of `num_samples` for the averaging to be correct. This causes a bug when `sample_weights` is of rank 2 or more and a broadcast happens when doing the multiplication. This logic existed in `tf_keras`: https://github.com/keras-team/tf-keras/blob/master/tf_keras/metrics/base_metric.py#L508
- `Accuracy` and `BinaryAccuracy` were doing a mean reduction too early, before multiplying by `sample_weights`. This matters when the rank of `sample_weights` is the same as `y_true` and `y_pred`.

Add tests for `DTypePolicyMap`

Fix test

Update the logic of `default_policy`

Improve serialization of `DTypePolicyMap`

Improve `__repr__` and `__eq__`

Add `custom_gradient` for the numpy backend (keras-team#19849)

fix variable name when add in init function (keras-team#19853)

Address comments

Update docstrings
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: Merged

Development

Successfully merging this pull request may close these issues.

4 participants