Есть ли способ преобразовать тензор pytorch в тензор тензорного потока

https://github.com/taoshen58/BiBloSA/blob/ec67cbdc411278dd29e8888e9fd6451695efc26c/context_fusion/self_attn.py#L29

Мне нужно использовать mulit_dimensional_attention из приведенной выше ссылки, которая реализована в TensorFlow, но я использую PyTorch, поэтому могу ли я преобразовать Pytorch Tensor в TensorFlow Tensor или мне нужно реализовать его в PyTorch.

код, который я пытаюсь использовать здесь, я должен передать 'rep_tensor' как тензорный тип TensorFlow, но у меня есть тензор PyTorch

def multi_dimensional_attention(rep_tensor, rep_mask=None, scope=None,
                                keep_prob=1., is_train=None, wd=0., activation='elu',
                                tensor_dict=None, name=None):

    # bs, sl, vec = tf.shape(rep_tensor)[0], tf.shape(rep_tensor)[1], tf.shape(rep_tensor)[2]

    ivec = rep_tensor.shape[2]
    with tf.variable_scope(scope or 'multi_dimensional_attention'):
        map1 = bn_dense_layer(rep_tensor, ivec, True, 0., 'bn_dense_map1', activation,
                              False, wd, keep_prob, is_train)
        map2 = bn_dense_layer(map1, ivec, True, 0., 'bn_dense_map2', 'linear',
                              False, wd, keep_prob, is_train)
        # map2_masked = exp_mask_for_high_rank(map2, rep_mask)

        soft = tf.nn.softmax(map2, 1)  # bs,sl,vec
        attn_output = tf.reduce_sum(soft * rep_tensor, 1)  # bs, vec

        # save attn
        if tensor_dict is not None and name is not None:
            tensor_dict[name] = soft

        return attn_output


person waleed hamid    schedule 17.03.2020    source источник


Ответы (1)


Вы можете преобразовать тензор pytorch в массив numpy и преобразовать его в тензор тензорного потока и наоборот:

import torch
import tensorflow as tf

pytorch_tensor = torch.zeros(10)
np_tensor = pytorch_tensor.numpy()
tf_tensor = tf.convert_to_tensor(np_tensor)

При этом, если вы хотите обучить модель, которая использует комбинацию pytorch и tensorflow, это будет ... неудобно, медленно, с ошибками и, мягко говоря, долго писать. Поскольку библиотеки должны выяснить, как распространить стоимость в обратном направлении.

Поэтому, если блок внимания pytorch, который у вас есть, предварительно обучен, я бы рекомендовал просто придерживаться той или иной библиотеки, есть множество примеров для реализации всего, что вы хотите, в любой из них и множество предварительно обученных моделей для обеих. Tensorflow обычно немного быстрее, но разница в скорости не столь значительна, и вид «взлома», который я представил выше, скорее всего, сделает все это медленнее, чем использование любой из автономных библиотек.

person George    schedule 17.03.2020