在Tensorflow 2.0中使用Numpy操作会影响其性能吗?

我在这里研究转换器代码作为示例。


下面的位置编码函数使用 numpy 进行其所有操作。然后在返回结果时将它们转换回TF张量。这种模式是否会影响运行代码时的性能,尤其是在 GPU 上运行代码时?是否建议在实现模型时仅使用 TF 操作?


def get_positional_encoding(self, max_len):

    """PE_(pos, 2i) = sin(pos/10000^(2i/d_model))

    PE_(pos, 2i+1) = cos(pos/10000^(2i/d_model))

    """


    pos = np.expand_dims(np.arange(0, max_len), axis=1)

    div_term = np.array([[1 / np.power(10000, (2 * (i//2) / self.d_model)) for i in range(self.d_model)]])       


    pos = pos * div_term


    pe = np.zeros((max_len, self.d_model))

    pe[:, 0:self.d_model//2] = np.sin(pos[:, 0::2])

    pe[:, self.d_model//2:] = np.cos(pos[:, 0::2])


    pe = np.expand_dims(pe, 0)


    print(pe.shape)


    return tf.cast(pe, dtype=tf.float32) 


DIEA
浏览 117回答 1
1回答

慕村225694

是的,它确实会影响性能,这是假设您可以正确执行代码而不会出现任何错误。一个因素是将值从CPU传递/复制到GPU所需的时间,这会增加大量的开销时间,矩阵越大。Tensorflow是为在GPU中运行的而构建的,因此当您在代码的每个部分中使用所有Tensorflow操作时,您将看到性能的显着提高,只是因为将值从CPU传递到GPU所需的时间,这还不考虑使用Tensors进行计算时应用的优化。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python