|
1 | 1 | # keras3 (development version) |
2 | 2 |
|
3 | | -- Expanded numeric operations with `op_layer_normalization()`, `op_cbrt()`, |
4 | | - `op_corrcoef()`, `op_deg2rad()`, `op_heaviside()`, the new `op_sparse_sigmoid()` |
5 | | - plus matching `activation_sparse_sigmoid()`, and an `attn_logits_soft_cap` |
6 | | - argument for `op_dot_product_attention()`. |
| 3 | +# keras3 1.5.0 |
| 4 | + |
| 5 | +- `register_keras_serializable()` now updates R layer wrappers to use the |
| 6 | + registered class when called. |
| 7 | + |
| 8 | +- Numeric ops now include `op_layer_normalization()`, `op_cbrt()`, |
| 9 | + `op_corrcoef()`, `op_deg2rad()`, `op_heaviside()`, `op_sparse_sigmoid()`, |
| 10 | + and `activation_sparse_sigmoid()`. `op_dot_product_attention()` gains |
| 11 | + `attn_logits_soft_cap`. |
7 | 12 |
|
8 | 13 | - Added signal window operations: `op_bartlett()`, `op_blackman()`, |
9 | 14 | `op_hamming()`, `op_hanning()`, and `op_kaiser()`. |
10 | 15 |
|
11 | 16 | - Added `loss_categorical_generalized_cross_entropy()` for training with noisy |
12 | 17 | labels. |
13 | 18 |
|
14 | | -- LoRA-enabled layers (`layer_dense()`, `layer_embedding()`, `layer_einsum_dense()`) |
15 | | - gain a `lora_alpha` argument to scale the adaptation delta independently of the |
16 | | - chosen rank. |
| 19 | +- LoRA-enabled layers (`layer_dense()`, `layer_embedding()`, |
| 20 | + `layer_einsum_dense()`) gain a `lora_alpha` argument to scale the adaptation |
| 21 | + delta independently of the chosen rank. |
17 | 22 |
|
18 | 23 | - Added complex-valued helpers: S3 `Arg()` methods for tensors, `op_angle()`, |
19 | 24 | and conversions `op_view_as_real()` / `op_view_as_complex()`. |
20 | 25 |
|
21 | 26 | - Added the Muon optimizer via `optimizer_muon()`. |
22 | 27 |
|
23 | | -- Added elastic deformation utilities for images: `layer_random_elastic_transform()` |
24 | | - and the lower-level `op_image_elastic_transform()`. |
| 28 | +- Added elastic deformation utilities for images: |
| 29 | + `layer_random_elastic_transform()` and the lower-level |
| 30 | + `op_image_elastic_transform()`. |
25 | 31 |
|
26 | 32 | - Added `as.array()` support for `PIL.Image.Image` objects. |
27 | 33 |
|
28 | 34 | - Transposed convolution utilities now follow the latest Keras API: |
29 | | - `op_conv_transpose()` defaults `strides = 1` and the `layer_conv_*_transpose()` |
30 | | - layers expose `output_padding` for precise shape control. |
| 35 | + `op_conv_transpose()` defaults to `strides = 1`, and |
| 36 | + `layer_conv_*_transpose()` layers expose `output_padding` for precise shape |
| 37 | + control. |
31 | 38 |
|
32 | 39 | - `register_keras_serializable()` now returns a registered Python callable, |
33 | 40 | making it easier to use with bare R functions. |
|
38 | 45 | - `keras_variable()` now accepts a `synchronization` argument for distributed |
39 | 46 | strategies. |
40 | 47 |
|
41 | | -- `layer_layer_normalization()` removes the `rms_scaling` argument. |
| 48 | +- `layer_layer_normalization()` now omits the |
| 49 | + `rms_scaling` argument. |
42 | 50 |
|
43 | | -- Merging layers now capture `...` with tidy dots (fixes #1525). |
| 51 | +- Merging layers now capture `...` with tidy dots (#1525). |
44 | 52 |
|
45 | | -- Fixed Ops on JAX `_DimExpr` so symbolic shapes survive arithmetic with R |
46 | | - double scalars. |
| 53 | +- JAX `_DimExpr` shapes now remain symbolic when combined with R double scalars. |
47 | 54 |
|
48 | | -- `layer_reshape()` can now accept `-1` as a sentinel for an automatically calculated axis size. |
| 55 | +- `layer_reshape()` now accepts `-1` as a sentinel for an automatically |
| 56 | + calculated axis size. |
49 | 57 |
|
50 | 58 | - `layer_torch_module_wrapper()` gains an `output_shape` argument to help Keras |
51 | 59 | infer shapes when wrapping PyTorch modules. |
52 | 60 |
|
53 | | -- `Layer$add_weight()` gains an `overwrite_with_gradient` option and |
54 | | - layers now provide a `symbolic_call()` method. |
| 61 | +- `Layer$add_weight()` gains an `overwrite_with_gradient` option, and layers |
| 62 | + now provide a `symbolic_call()` method. |
55 | 63 |
|
56 | | -- Added `str()` S3 method for Keras Variables. |
| 64 | +- Added `str()` S3 method for Keras `Variable`s. |
57 | 65 |
|
58 | | -- Added S3 methods for JAX array: |
59 | | - `str()`, `as.array()`, `as.double()`, `as.integer()`, `as.numeric()`. |
| 66 | +- JAX arrays now have S3 methods for `str()`, `as.array()`, `as.double()`, |
| 67 | + `as.integer()`, and `as.numeric()`. |
60 | 68 |
|
61 | | -- Added base-array compatibility methods for backend tensors: `t()`, |
62 | | - `aperm()`, and `all.equal()`. |
| 69 | +- Backend tensors now support base array helpers: `t()`, `aperm()`, and |
| 70 | + `all.equal()`. |
63 | 71 |
|
64 | | -- Added `pillar::type_sum()` for JAX variables and `JaxVariable`; |
65 | | - extended `str()` coverage to the new JAX variable class. |
| 72 | +- Added `pillar::type_sum()` for JAX variables and `JaxVariable`; `str()` now |
| 73 | + covers the new JAX variable class. |
66 | 74 |
|
67 | | -- `config_max_epochs()`, `config_set_max_epochs()`, `config_max_steps_per_epoch()`, |
68 | | - and `config_set_max_steps_per_epoch()`. The caps can also be set via the |
69 | | - `KERAS_MAX_EPOCHS` and `KERAS_MAX_STEPS_PER_EPOCH` environment variables. |
70 | | - Added `config_is_nnx_enabled()` to check whether JAX NNX features are enabled. |
| 75 | +- Added training caps via `config_max_epochs()`, `config_set_max_epochs()`, |
| 76 | + `config_max_steps_per_epoch()`, and `config_set_max_steps_per_epoch()`. The |
| 77 | + caps can also be set via the `KERAS_MAX_EPOCHS` and |
| 78 | + `KERAS_MAX_STEPS_PER_EPOCH` environment variables. Added |
| 79 | + `config_is_nnx_enabled()` to check whether JAX NNX features are enabled. |
71 | 80 |
|
72 | 81 | - Built-in dataset loaders now accept `convert = FALSE` to return NumPy arrays |
73 | 82 | instead of R arrays. |
74 | 83 |
|
75 | | -- Updated `plot(history, theme_bw = TRUE)` for `ggplot2` 3.4.0 |
76 | | - compatibility. |
| 84 | +- `plot(history, theme_bw = TRUE)` is now compatible with `ggplot2` 3.4.0. |
77 | 85 |
|
78 | | -- `plot(model)` DPI is now globally configurable via |
79 | | - `options(keras.plot.model.dpi = )`, (defaults to `200`). |
| 86 | +- `plot(model)` now reads DPI from `options(keras.plot.model.dpi = 200)` |
| 87 | + (default is 200). |
80 | 88 |
|
81 | 89 | - Reexported reticulate functions: `py_help()`, `py_to_r()`, `r_to_py()`, |
82 | 90 | `py_require()`, and `import()`. |
83 | 91 |
|
84 | | -- Support `super()$initialize()` in subclassed Keras classes; improved |
85 | | - `super()` behavior in subclasses. |
| 92 | +- `super()$initialize()` now works in subclassed Keras classes, and `super()` |
| 93 | + behavior is improved in subclasses. |
| 94 | + |
| 95 | +- `use_backend("jax", gpu = TRUE)` now declares dependencies compatible with |
| 96 | + `keras-hub`. |
86 | 97 |
|
87 | | -- Updated dependencies declared by `use_backend("jax", gpu=TRUE)` |
88 | | - for compatability with `keras-hub`. |
| 98 | +- Exported `named_list()`. |
89 | 99 |
|
90 | | -- Exported `named_list()` utility. |
| 100 | +- Switching backends twice in a row now works reliably. |
91 | 101 |
|
92 | | -- Fixed an issue when switching backends twice in a row. |
| 102 | +- `layer_dropout()` now preserves `noise_shape` as an integer array so |
| 103 | + length-one shapes are passed to Keras as iterables. |
93 | 104 |
|
94 | 105 | # keras3 1.4.0 |
95 | 106 |
|
|
0 commit comments