Skip to content

Conversation

@Shi-pra-19
Copy link

Refactor the example to use keras 3 and create custom layer to wrap Sentence Encoder.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @Shi-pra-19, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request refactors the tweet classification example to ensure full compatibility with Keras 3. The primary goal is to modernize the codebase by updating Keras imports, encapsulating the Universal Sentence Encoder within a custom Keras layer, and transitioning to the new keras.ops API for tensor manipulations. This migration ensures the example leverages the latest Keras features and best practices.

Highlights

  • Keras 3 Migration: The example has been updated to align with Keras 3, including changes to import statements and API calls.
  • Custom Sentence Encoder Layer: A new custom keras.layers.Layer named SentenceEncoderLayer was introduced to wrap the tensorflow_hub.KerasLayer for the Universal Sentence Encoder, improving modularity.
  • Keras Operations API Adoption: TensorFlow operations such as tf.expand_dims, tf.squeeze, and tf.round have been replaced with their Keras 3 keras.ops equivalents.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request successfully migrates the tweet classification example to Keras 3 by updating imports, using keras.ops, and wrapping the tensorflow_hub layer in a custom Keras layer. The changes are well-aligned with the goals of Keras 3. I've provided a few suggestions to further improve the implementation of the custom layer and to align the prediction logic with Keras best practices. These changes will enhance the code's maintainability and robustness.


class SentenceEncoderLayer(keras.layers.Layer):
def __init__(self, **kwargs):
super(SentenceEncoderLayer, self).__init__(**kwargs)
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

For better maintainability and to adhere to modern Python 3 conventions, it's recommended to use the zero-argument super() call.

Suggested change
super(SentenceEncoderLayer, self).__init__(**kwargs)
super().__init__(**kwargs)

Comment on lines +167 to +168
def call(self, inputs):
return self.encoder(inputs)
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

It's a good practice for custom layers to accept and forward the training argument in the call method. This ensures the layer behaves correctly in both training and inference modes, even if the underlying hub.KerasLayer doesn't change its behavior in this case. It makes the layer more robust and aligned with Keras API conventions.

Suggested change
def call(self, inputs):
return self.encoder(inputs)
def call(self, inputs, training=False):
return self.encoder(inputs, training=training)

Comment on lines 288 to +289
preds = model_1.predict_step(text)
preds = tf.squeeze(tf.round(preds))
preds = keras.ops.squeeze(keras.ops.round(preds))
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

While predict_step works, it's not part of the public Keras API and is intended for internal use. The recommended public API for getting predictions is model.predict(). It's more idiomatic and returns NumPy arrays, which simplifies the subsequent processing. Using predict() would make the code more robust to future Keras updates.

Suggested change
preds = model_1.predict_step(text)
preds = tf.squeeze(tf.round(preds))
preds = keras.ops.squeeze(keras.ops.round(preds))
preds = model_1.predict(text)
preds = np.squeeze(np.round(preds))

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants