Transpile any model#
Keras model into a
⚠️ If you are running this notebook in Colab, you will have to install
Ivy and some dependencies manually. You can do so by running the cell below ⬇️
If you want to run the notebook locally but don’t have Ivy installed just yet, you can check out the Get Started section of the docs.
!pip install ivy
As we’ve already seen,
ivy.transpile can convert functions and whole libraries from one framework to another. However, in machine learning and deep learning, much of the focus is on trainable modules. Fortunately, Ivy can manage the parameters of these modules and ensure that the transpiled module is fully compatible with the target framework. This allows you to take full advantage of the training utilities provided by any framework and to build complex models on top of the transpiled ones.
Let’s see how this works!
Let’s start by importing the neccessary libraries:
import ivy import torch import numpy as np import tensorflow as tf
There are examples which use more involved models in the Guides section, but to keep things simple, let’s define a basic convolutional network using Keras’ Sequential API to use it as the starting point!
model = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 3)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(10, activation='softmax') ])
Now, we can use
ivy.transpile to convert this
Keras model to
PyTorch. Since we are passing a framework-specific object to the
transpile function, there is no need to specify the
source keyword argument this time.
input_array = tf.random.normal((1, 28, 28, 3)) torch_model = ivy.transpile(model, source = "tensorflow", to="torch", args=(input_array,))
Thanks to (eager) transpilation, we now have a fully-fledged
This means that we can pass
PyTorch inputs (keeping the channels-last format of
Keras, as the new computational graph is identical to the original one!) and get
PyTorch tensors as the output:
input_array = torch.rand((1, 28, 28, 3)) output_array = torch_model(input_array) print(output_array)
tensor([[0.0768, 0.0727, 0.0942, 0.1300, 0.1350, 0.0839, 0.1511, 0.1061, 0.0606, 0.0896]], grad_fn=<SoftmaxBackward0>)
Furthermore, having a
torch.nn.Module also enables you to train the model using PyTorch training code, and also to use the transpiled model to build more complex torch models, as shown in the Transpiling a haiku model to build on top guide!
This is the last tutorial related to the compiler/transpiler in Learn the Basics. In the next tutorial, we’ll go over an introduction to building models directly using Ivy 👨💻. If you are interested in continuing to learn about transpilation, you can check out the more complex tutorials in the Guides section!