-
Notifications
You must be signed in to change notification settings - Fork 2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Updating Semi-supervised image classification using contrastive pretraining with SimCLR Keras 3 example (TF-Only) #1777
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the PR, the code looks good!
@@ -416,19 +417,19 @@ def contrastive_loss(self, projections_1, projections_2): | |||
# NT-Xent loss (normalized temperature-scaled cross entropy) | |||
|
|||
# Cosine similarity: the dot product of the l2-normalized feature vectors | |||
projections_1 = tf.math.l2_normalize(projections_1, axis=1) | |||
projections_2 = tf.math.l2_normalize(projections_2, axis=1) | |||
projections_1 = keras.utils.normalize(projections_1, axis=1, order=2) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can just use ops.normalize
with the latest Keras version
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah. Replaced with Keras ops.
(batch_size, 1, 1, 1), | ||
minval=-self.brightness, | ||
maxval=self.brightness, | ||
) | ||
# Different for all colors | ||
jitter_matrices = tf.random.uniform( | ||
jitter_matrices = keras.random.uniform( | ||
(batch_size, 1, 3, 3), minval=-self.jitter, maxval=self.jitter | ||
) | ||
|
||
color_transforms = ( | ||
tf.eye(3, batch_shape=[batch_size, 1]) * brightness_scales |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can this be converted to ops
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, actually, there were some issues. In spite of having the same TF ops in Keras, the batch_shape
attribute that is present here is missing in Keras ops. That is why I did not change this in the first place. But I addressed this in the latest commit and replaced the TF ops.
Thanks for the PR @sitamgithub-MSIT, there is 2 more ops that can be converted to Keras 3 |
At first, this two-ops implementation in the code example did not exactly match the corresponding Keras ops, which is why I did not change those in the first place. But in the latest commit, I replaced these two TF ops. And the code example is working fine. You can check the mentioned notebook in the PR description. |
|
||
# Same for all colors | ||
brightness_scales = 1 + tf.random.uniform( | ||
brightness_scales = 1 + keras.random.uniform( | ||
(batch_size, 1, 1, 1), | ||
minval=-self.brightness, | ||
maxval=self.brightness, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please add a seed=self.seed_generator
arg and create self.seed_generator
in __init__()
.
(batch_size, 1, 1, 1), | ||
minval=-self.brightness, | ||
maxval=self.brightness, | ||
) | ||
# Different for all colors | ||
jitter_matrices = tf.random.uniform( | ||
jitter_matrices = keras.random.uniform( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here.
@fchollet I added seed generator arguments to random operations. Is everything OK now? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thank you! Please add the generated files.
…aining with SimCLR Keras 3 example (TF-Only) (keras-team#1777) * Update to the existing keras3 example * left tf ops replaced with keras ops * formatting done * seed generator added * .md and .ipynb file added
Corresponding Issue
This PR updates the Semi-supervised image classification using contrastive pretraining with SimCLR Keras 3.0 example [TF Only Backend]. Many TF ops are replaced with corresponding Keras ops.
For example, here is the notebook link provided:
https://colab.research.google.com/drive/1rLAKohQaybEuUR-Nxgl3VDjZ8g5qmzid?usp=sharing
cc: @fchollet @divyashreepathihalli
The following describes the Git difference for the changed files:
Changes: