我在这里研究转换器代码作为示例。下面的位置编码函数使用 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)
1 回答
慕村225694
TA贡献1880条经验 获得超4个赞
是的,它确实会影响性能,这是假设您可以正确执行代码而不会出现任何错误。
一个因素是将值从CPU传递/复制到GPU所需的时间,这会增加大量的开销时间,矩阵越大。
Tensorflow是为在GPU中运行的而构建的,因此当您在代码的每个部分中使用所有Tensorflow操作时,您将看到性能的显着提高,只是因为将值从CPU传递到GPU所需的时间,这还不考虑使用Tensors进行计算时应用的优化。
添加回答
举报
0/150
提交
取消