Operators Override
Python api itex.experimental_ops_override() is provided to automatically replace some TensorFlow operators by Custom Operators under itex.ops namespace, as well as to be compatible with existing trained parameters.
Usage
After itex.experimental_ops_override() is called, these TensorFlow APIs are automatically replaced by Customized Operators. For Keras layers, their call functions will be overloaded; layer names will be kept.
Layer Normalization
tf.keras.layers.LayerNormalization and keras.layers.LayerNormalization will be fused by Customized Operators of LayerNorm and LayerNormGrad. For example:
$ python
>>> import tensorflow as tf
>>> import intel_extension_for_tensorflow as itex
>>> itex.experimental_ops_override()
>>> tf.keras.layers.LayerNormalization(
axis=-1, epsilon=0.001, center=True, scale=True,
beta_initializer='zeros', gamma_initializer='ones',
beta_regularizer=None, gamma_regularizer=None, beta_constraint=None,
gamma_constraint=None, **kwargs)
>>> # it will run by op ITEXLayerNorm and ITEXLayerNormGrad
Dense Layer
tf.keras.layers.Dense and keras.layers.core.dense.Dense will be optimized by BatchMatMul, BiasAdd and Activation fusion for prediction, MatMul and BiasAdd fusion for training. For example:
$ python
>>> import tensorflow as tf
>>> import intel_extension_for_tensorflow as itex
>>> itex.experimental_ops_override()
>>> tf.keras.layers.Dense(32, activation='relu')
Gelu Activation
tf.nn.gelu will be replaced by itex.ops.gelu. For example:
$ python
>>> import tensorflow as tf
>>> import intel_extension_for_tensorflow as itex
>>> itex.experimental_ops_override()
>>> x = tf.constant([-3.0, -1.0, 0.0, 1.0, 3.0], dtype=tf.float32)
>>> y = tf.nn.gelu(x)
>>> # it will run by op ITEXGelu and ITEXGeluGrad
Instance Normalization
If TensorFlow Addons is installed, tfa.layers.InstanceNormalization will be replaced by custom implementation using Transpose and itex.ops.LayerNormalization. For example:
$ python
>>> import tensorflow as tf
>>> import intel_extension_for_tensorflow as itex
>>> itex.experimental_ops_override()
tfa.layers.InstanceNormalization(
axis=-1,
beta_initializer='zeros',
gamma_initializer='ones',
**kwargs)
>>> # it will run by op Transpose and ITEXLayerNorm
LSTM
If Intel® Extension for TensorFlow* backend is XPU, tf.keras.layers.LSTM will be replaced by itex.ops.ItexLSTM. For example:
$ python
>>> import tensorflow as tf
>>> import intel_extension_for_tensorflow as itex
>>> itex.experimental_ops_override()
>>> itex.ops.ItexLSTM(
200, activation='tanh',
recurrent_activation='sigmoid',
use_bias=True,
kernel_initializer='glorot_uniform',
recurrent_initializer='orthogonal',
bias_initializer='zeros', **kwargs
)
>>> # it will run by op ItexRnn
AdamW
If Intel® Extension for TensorFlow* backend is XPU, tf.keras.optimizers.AdamW and keras.optimizers.AdamW will be fused by itex.ops.AdamWithWeightDecayOptimizer. For examples:
$ python
>>> import tensorflow as tf
>>> import intel_extension_for_tensorflow as itex
>>> itex.experimental_ops_override()
>>> optimizer = tf.keras.optimizers.AdamW(
learning_rate=0.02,
weight_decay=0.01,
beta_1=0.9,
beta_2=0.999,
epsilon=1e-6)
>>> # it will run by op ITEXResourceApplyAdamWithWeightDecay