Есть ли способ преобразовать тензор Pytorch в тензор потока - PullRequest
0 голосов
/ 17 марта 2020

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

Мне нужно использовать mulit_dimensional_attention по приведенной выше ссылке, которая реализована в TensorFlow, но я использую PyTorch, поэтому я могу преобразовать Tensor Pytorch в 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

1 Ответ

0 голосов
/ 17 марта 2020

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

import torch
import tensorflow as tf

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...