Skip to content

Commit

Permalink
Extract everything to a convert_batch_encoding function
Browse files Browse the repository at this point in the history
  • Loading branch information
Rocketknight1 committed Jan 30, 2024
1 parent 1f926cc commit a991ba3
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 37 deletions.
44 changes: 7 additions & 37 deletions src/transformers/modeling_tf_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,12 @@
from .dynamic_module_utils import custom_object_save
from .generation import GenerationConfig, TFGenerationMixin
from .tf_utils import (
convert_batch_encoding,
expand_1d,
load_attributes_from_hdf5_group,
save_attributes_to_hdf5_group,
shape_list,
)
from .tokenization_utils_base import BatchEncoding
from .utils import (
SAFE_WEIGHTS_INDEX_NAME,
SAFE_WEIGHTS_NAME,
Expand Down Expand Up @@ -1160,62 +1160,32 @@ def get_config(self):
# Do not merge this before that PR is in!
@functools.wraps(tf.keras.Model.fit)
def fit(self, *args, **kwargs):
# Convert HF BatchEncoding objects to dicts that Keras understands
if args and isinstance(args[0], BatchEncoding):
args = list(args)
args[0] = dict(args[0])
elif "x" in kwargs and isinstance(kwargs["x"], BatchEncoding):
kwargs["x"] = dict(kwargs["x"])
args, kwargs = convert_batch_encoding(*args, **kwargs)
return super().fit(*args, **kwargs)

@functools.wraps(tf.keras.Model.train_on_batch)
def train_on_batch(self, *args, **kwargs):
# Convert HF BatchEncoding objects to dicts that Keras understands
if args and isinstance(args[0], BatchEncoding):
args = list(args)
args[0] = dict(args[0])
elif "x" in kwargs and isinstance(kwargs["x"], BatchEncoding):
kwargs["x"] = dict(kwargs["x"])
args, kwargs = convert_batch_encoding(*args, **kwargs)
return super().train_on_batch(*args, **kwargs)

@functools.wraps(tf.keras.Model.test_on_batch)
def test_on_batch(self, *args, **kwargs):
# Convert HF BatchEncoding objects to dicts that Keras understands
if args and isinstance(args[0], BatchEncoding):
args = list(args)
args[0] = dict(args[0])
elif "x" in kwargs and isinstance(kwargs["x"], BatchEncoding):
kwargs["x"] = dict(kwargs["x"])
args, kwargs = convert_batch_encoding(*args, **kwargs)
return super().test_on_batch(*args, **kwargs)

@functools.wraps(tf.keras.Model.predict_on_batch)
def predict_on_batch(self, *args, **kwargs):
# Convert HF BatchEncoding objects to dicts that Keras understands
if args and isinstance(args[0], BatchEncoding):
args = list(args)
args[0] = dict(args[0])
elif "x" in kwargs and isinstance(kwargs["x"], BatchEncoding):
kwargs["x"] = dict(kwargs["x"])
args, kwargs = convert_batch_encoding(*args, **kwargs)
return super().predict_on_batch(*args, **kwargs)

@functools.wraps(tf.keras.Model.predict)
def predict(self, *args, **kwargs):
# Convert HF BatchEncoding objects to dicts that Keras understands
if args and isinstance(args[0], BatchEncoding):
args = list(args)
args[0] = dict(args[0])
elif "x" in kwargs and isinstance(kwargs["x"], BatchEncoding):
kwargs["x"] = dict(kwargs["x"])
args, kwargs = convert_batch_encoding(*args, **kwargs)
return super().predict(*args, **kwargs)

@functools.wraps(tf.keras.Model.evaluate)
def evaluate(self, *args, **kwargs):
# Convert HF BatchEncoding objects to dicts that Keras understands
if args and isinstance(args[0], BatchEncoding):
args = list(args)
args[0] = dict(args[0])
elif "x" in kwargs and isinstance(kwargs["x"], BatchEncoding):
kwargs["x"] = dict(kwargs["x"])
args, kwargs = convert_batch_encoding(*args, **kwargs)
return super().evaluate(*args, **kwargs)

@classmethod
Expand Down
11 changes: 11 additions & 0 deletions src/transformers/tf_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import numpy as np
import tensorflow as tf

from .tokenization_utils_base import BatchEncoding
from .utils import logging


Expand Down Expand Up @@ -253,3 +254,13 @@ def _expand_single_1d_tensor(t):
return t

return tf.nest.map_structure(_expand_single_1d_tensor, data)


def convert_batch_encoding(*args, **kwargs):
# Convert HF BatchEncoding objects in the inputs to dicts that Keras understands
if args and isinstance(args[0], BatchEncoding):
args = list(args)
args[0] = dict(args[0])
elif "x" in kwargs and isinstance(kwargs["x"], BatchEncoding):
kwargs["x"] = dict(kwargs["x"])
return args, kwargs

0 comments on commit a991ba3

Please sign in to comment.