From ab97032633fb9637481421c4452414e6bff91173 Mon Sep 17 00:00:00 2001 From: Dobiasd Date: Sun, 19 Jan 2025 18:39:02 +0100 Subject: [PATCH] Switch from model.predict(x) to model(x).numpy() for TF performance --- FAQ.md | 2 +- keras_export/convert_model.py | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/FAQ.md b/FAQ.md index c7d538c3..20bae063 100644 --- a/FAQ.md +++ b/FAQ.md @@ -158,7 +158,7 @@ To check if the input values really are the same, you can print them, in Python input = ... print(input) print(input.shape) -result = model.predict([input]) +result = model([input]).numpy() print(result) print(result.shape) # result[0].shape in case of multiple output tensors ``` diff --git a/keras_export/convert_model.py b/keras_export/convert_model.py index 8f450638..1b47104d 100755 --- a/keras_export/convert_model.py +++ b/keras_export/convert_model.py @@ -71,7 +71,7 @@ def get_model_input_layers(model): def measure_predict(model, data_in): """Returns output and duration in seconds""" start_time = datetime.datetime.now() - data_out = model.predict(data_in) + data_out = model(data_in).numpy() end_time = datetime.datetime.now() duration = end_time - start_time print('Forward pass took {} s.'.format(duration.total_seconds())) @@ -558,11 +558,14 @@ def get_all_weights(model, prefix): layers = model.layers assert K.image_data_format() == 'channels_last' for layer in layers: + layer_type = type(layer).__name__ for node in layer._inbound_nodes: if "training" in node.arguments.kwargs: - assert node.arguments.kwargs["training"] is not True, \ + is_layer_with_accidental_training_flag = layer_type in ("CenterCrop", "Resizing") + has_training = node.arguments.kwargs["training"] is True + assert not has_training or is_layer_with_accidental_training_flag, \ "training=true is not supported, see https://github.com/Dobiasd/frugally-deep/issues/284" - layer_type = type(layer).__name__ + name = prefix + layer.name assert is_ascii(name) if name in result: