我需要使用TensorFlow中实现的上述链接中的mulit_Dimension_attention,但我正在使用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
答案 0 :(得分:2)
您可以将pytorch张量转换为numpy数组,并将其转换为tensorflow张量,反之亦然:
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通常会更快一些,但速度差异并不明显,我上面介绍的“ hack”可能会使整体运行速度比单独使用这两个库慢。