# Converting a PyTorch model into Tensorflow

**URL:** <https://discuss.huggingface.co/t/converting-a-pytorch-model-into-tensorflow/17456>\
**Category:** Beginners\
**Created:** [May 3, 2022, 5:00am UTC](https://discuss.huggingface.co/t/converting-a-pytorch-model-into-tensorflow/17456 "2022-05-03T05:00:24Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![yulgm](https://avatars.discourse-cdn.com/v4/letter/y/41988e/32.png) [@yulgm](https://discuss.huggingface.co/u/yulgm)\
**Post date:** [May 3, 2022, 5:00am UTC](https://discuss.huggingface.co/t/converting-a-pytorch-model-into-tensorflow/17456/1 "2022-05-03T05:00:24Z")

</div>

Hi everyone!

I am trying to load a model with instructions for PyTorch into a Tensorflow framework. [tuner007/pegasus\_paraphrase · Hugging Face](https://huggingface.co/tuner007/pegasus_paraphrase)

(I have M1 with accelerators for tensorflow and so far none for PyTorch, so most of my work is tensorflow)

I tested the code provided in the card in torch and it works without issues:

```auto
import torch
from transformers import PegasusForConditionalGeneration, PegasusTokenizer
model_name = 'tuner007/pegasus_paraphrase'
torch_device = 'cuda' if torch.cuda.is_available() else 'cpu'
tokenizer = PegasusTokenizer.from_pretrained(model_name)
model = PegasusForConditionalGeneration.from_pretrained(model_name).to(torch_device)

def get_response(input_text,num_return_sequences,num_beams):
  batch = tokenizer([input_text],truncation=True,padding='longest',max_length=60, return_tensors="pt").to(torch_device)
  translated = model.generate(**batch,max_length=60,num_beams=num_beams, num_return_sequences=num_return_sequences, temperature=1.5)
  tgt_text = tokenizer.batch_decode(translated, skip_special_tokens=True)
  return tgt_text

num_beams = 10
num_return_sequences = 5
context = "The ultimate test of your knowledge is your capacity to convey it to another."
get_response(context,num_return_sequences,num_beams)

```

So I’m trying to modify all of this for Tensorflow and got this far:

```auto
from transformers import TFPegasusForConditionalGeneration, PegasusTokenizer

tf_model_name = 'tuner007/pegasus_paraphrase'
tf_tokenizer = PegasusTokenizer.from_pretrained(tf_model_name, return_tensors='tf', max_length=512, truncation=True)
tf_model = TFPegasusForConditionalGeneration.from_pretrained(tf_model_name, from_pt=True)

def get_response_tf(input_text,num_return_sequences,num_beams):
  batch = tf_tokenizer([input_text],truncation=True,padding='longest',max_length=60, return_tensors="tf")
  translated = tf_model.generate(**batch,max_length=60,num_beams=num_beams, num_return_sequences=num_return_sequences, temperature=1.5)
  tgt_text = tf_tokenizer.batch_decode(translated, skip_special_tokens=True)
  return tgt_text

num_beams = 10
num_return_sequences = 5
context = "The ultimate test of your knowledge is your capacity to convey it to another."
get_response_tf(context,num_return_sequences,num_beams)

```

However when I run it I get this error:  
`InvalidArgumentError: slice index -22336 of dimension 0 out of bounds. [Op:StridedSlice] name: strided_slice/`

Am I missing some step in conversion?

FULL ERROR TEXT:

```nohighlight
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
Input In [80], in <cell line: 4>()
      2 num_return_sequences = 5
      3 context = "The ultimate test of your knowledge is your capacity to convey it to another."
----> 4 get_response_tf(context,num_return_sequences,num_beams)

Input In [79], in get_response_tf(input_text, num_return_sequences, num_beams)
      1 def get_response_tf(input_text,num_return_sequences,num_beams):
      2 batch = tf_tokenizer([input_text],truncation=True,padding='longest',max_length=60, return_tensors="tf")
----> 3 translated = tf_model.generate(**batch,max_length=60,num_beams=num_beams, num_return_sequences=num_return_sequences, temperature=1.5)
      4 tgt_text = tf_tokenizer.batch_decode(translated, skip_special_tokens=True)
      5 return tgt_text

File ~/miniforge3/envs/ml1/lib/python3.9/site-packages/transformers/generation_tf_utils.py:736, in TFGenerationMixin.generate(self, input_ids, max_length, min_length, do_sample, early_stopping, num_beams, temperature, top_k, top_p, repetition_penalty, bad_words_ids, bos_token_id, pad_token_id, eos_token_id, length_penalty, no_repeat_ngram_size, num_return_sequences, attention_mask, decoder_start_token_id, use_cache, output_scores, output_attentions, output_hidden_states, return_dict_in_generate, forced_bos_token_id, forced_eos_token_id, **model_kwargs)
    731 assert (
    732 cur_len < max_length
    733 ), f"The context has {cur_len} number of tokens, but `max_length` is only {max_length}. Please make sure that `max_length` is bigger than the number of tokens, by setting either `generate(max_length=...,...)` or `config.max_length = ...`"
    735 if num_beams > 1:
--> 736 output = self._generate_beam_search(
    737 input_ids,
    738 cur_len=cur_len,
    739 max_length=max_length,
    740 min_length=min_length,
    741 do_sample=do_sample,
    742 early_stopping=early_stopping,
    743 temperature=temperature,
    744 top_k=top_k,
    745 top_p=top_p,
    746 repetition_penalty=repetition_penalty,
    747 no_repeat_ngram_size=no_repeat_ngram_size,
    748 bad_words_ids=bad_words_ids,
    749 pad_token_id=pad_token_id,
    750 eos_token_id=eos_token_id,
    751 batch_size=effective_batch_size,
    752 num_return_sequences=num_return_sequences,
    753 length_penalty=length_penalty,
    754 num_beams=num_beams,
    755 vocab_size=vocab_size,
    756 encoder_outputs=encoder_outputs,
    757 attention_mask=attention_mask,
    758 use_cache=use_cache,
    759 forced_bos_token_id=forced_bos_token_id,
    760 forced_eos_token_id=forced_eos_token_id,
    761 return_dict_in_generate=return_dict_in_generate,
    762 **model_kwargs,
    763 )
    764 else:
    765 output = self._generate_no_beam_search(
    766 input_ids,
    767 cur_len=cur_len,
   (...)
    785 **model_kwargs,
    786 )

File ~/miniforge3/envs/ml1/lib/python3.9/site-packages/transformers/generation_tf_utils.py:1307, in TFGenerationMixin._generate_beam_search(self, input_ids, cur_len, max_length, min_length, do_sample, early_stopping, temperature, top_k, top_p, repetition_penalty, no_repeat_ngram_size, bad_words_ids, pad_token_id, eos_token_id, batch_size, num_return_sequences, length_penalty, num_beams, vocab_size, encoder_outputs, attention_mask, use_cache, forced_bos_token_id, forced_eos_token_id, return_dict_in_generate, **kwargs)
   1304 beam_idx = tf.convert_to_tensor([x[2] for x in next_batch_beam], dtype=tf.int32)
   1306 # re-order batch and update current length
-> 1307 input_ids = tf.stack([tf.identity(input_ids[x, :]) for x in beam_idx])
   1308 input_ids = tf.concat([input_ids, tf.expand_dims(beam_tokens, 1)], axis=-1)
   1309 cur_len = cur_len + 1

File ~/miniforge3/envs/ml1/lib/python3.9/site-packages/transformers/generation_tf_utils.py:1307, in <listcomp>(.0)
   1304 beam_idx = tf.convert_to_tensor([x[2] for x in next_batch_beam], dtype=tf.int32)
   1306 # re-order batch and update current length
-> 1307 input_ids = tf.stack([tf.identity(input_ids[x, :]) for x in beam_idx])
   1308 input_ids = tf.concat([input_ids, tf.expand_dims(beam_tokens, 1)], axis=-1)
   1309 cur_len = cur_len + 1

File ~/miniforge3/envs/ml1/lib/python3.9/site-packages/tensorflow/python/util/traceback_utils.py:153, in filter_traceback.<locals>.error_handler(*args, **kwargs)
    151 except Exception as e:
    152 filtered_tb = _process_traceback_frames(e. __traceback__ )
--> 153 raise e.with_traceback(filtered_tb) from None
    154 finally:
    155 del filtered_tb

File ~/miniforge3/envs/ml1/lib/python3.9/site-packages/tensorflow/python/framework/ops.py:7107, in raise_from_not_ok_status(e, name)
   7105 def raise_from_not_ok_status(e, name):
   7106 e.message += (" name: " + name if name is not None else "")
-> 7107 raise core._status_to_exception(e) from None

InvalidArgumentError: slice index -22336 of dimension 0 out of bounds. [Op:StridedSlice] name: strided_slice/

```
