我在这里研究转换器代码作为示例。
下面的位置编码函数使用 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)
慕村225694
相关分类