From 3be11a79b7eb736b035499b9a1b990eeaf303063 Mon Sep 17 00:00:00 2001 From: Qingchao Shen Date: Sat, 29 Apr 2023 00:17:48 +0800 Subject: [PATCH 1/2] fix alpha in elu --- python/tvm/relay/frontend/keras.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/tvm/relay/frontend/keras.py b/python/tvm/relay/frontend/keras.py index 4539c221c986..ef94c74e032b 100644 --- a/python/tvm/relay/frontend/keras.py +++ b/python/tvm/relay/frontend/keras.py @@ -160,6 +160,8 @@ def _convert_advanced_activation(inexpr, keras_layer, etab, data_layout, input_s raise tvm.error.OpAttributeInvalid("The alpha value of a LeakyReLU cannot be None.") return _op.nn.leaky_relu(inexpr, alpha=float(keras_layer.alpha)) if act_type == "ELU": + if np.isnan(keras_layer.alpha).any(): + raise tvm.error.OpAttributeInvalid("The alpha value of a ELU cannot be None.") alpha = keras_layer.alpha if hasattr(keras_layer, "alpha") else 1.0 alpha = _expr.const(alpha, dtype="float32") return _get_elu(inexpr, alpha) From f4016725e760bf1ee06e6b462ff9a86145982fb4 Mon Sep 17 00:00:00 2001 From: Qingchao Shen Date: Sat, 29 Apr 2023 00:25:49 +0800 Subject: [PATCH 2/2] add test case --- tests/python/frontend/keras/test_forward.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/tests/python/frontend/keras/test_forward.py b/tests/python/frontend/keras/test_forward.py index 1377c180ae31..86e88d0764aa 100644 --- a/tests/python/frontend/keras/test_forward.py +++ b/tests/python/frontend/keras/test_forward.py @@ -214,19 +214,26 @@ def test_forward_activations(self, keras_mod): def test_forward_activations_except(self, keras_mod): """ - test invalid attribute alpha=None for LeakyReLU. + test invalid attribute alpha=None for LeakyReLU and ELU. after version 2.3.1 in keras, checking was added to reject the invalid api call: - LeakyReLU(alpha=None), (issue: https://github.com/tensorflow/tensorflow/pull/47017) + LeakyReLU(alpha=None) and ELU(alpha=None), + (see issue: https://github.com/tensorflow/tensorflow/pull/47017) Thus, it's necessary to check the keras version to avoid crash at LeakyReLU(alpha=None) + and ELU(alpha=None) """ if package_version.parse(keras_mod.__version__.split("-tf")[0]) <= package_version.parse( "2.3.1" ): + act_funcs = [ + keras_mod.layers.LeakyReLU(alpha=None), + keras_mod.layers.LEU(2, 3, 4), + ] data = keras_mod.layers.Input(shape=(2, 3, 4)) - layer = keras_mod.layers.LeakyReLU(alpha=None)(data) - keras_model = keras_mod.models.Model(data, layer) - with pytest.raises(tvm.error.OpAttributeInvalid): - verify_keras_frontend(keras_model) + for act_func in act_funcs: + layer = act_func(data) + keras_model = keras_mod.models.Model(data, layer) + with pytest.raises(tvm.error.OpAttributeInvalid): + verify_keras_frontend(keras_model) def test_forward_dense(self, keras_mod): """test_forward_dense"""