La atención es todo lo que necesita artículos en Transformador posicional Codificación aplicación de código y para explicar

En primer lugar, cuando se trata de papel porque no hay uso RNN tampoco hizo uso de la CNN para función de extracción, por lo que la sentencia no es un buen uso de información de ubicación. Así tenemos que añadir posicional de codificación después de la incrustación de entrada. Por lo tanto, el documento propone una implementación, el código de aplicación posicional Codificación y publicó la siguiente explicación.

En primer lugar, mirada en la manera presentó el documento, los puntos de venta de información de posición es la palabra, dmodel de la palabra vector de la incorporación de la dimensión. 

Los rangos de magnitud de vector resultantes son entre -1 y 1.

 

 

  

Código es el siguiente.

# N_position frase se divide en palabras o caracteres de longitud, d_hid palabra vector para la dimensión.
get_sinusoid_encoding_table DEF (n_position, d_hid, padding_idx = None):
'' 'de codificación de posición sinusoide Tabla' ''

DEF cal_angle (posición, hid_idx):
posición de retorno / np.power (10000, 2 * (hid_idx // 2) / d_hid)

get_posi_angle_vec DEF (posición):
retorno [cal_angle (posición, hid_j) para hid_j en Rango (d_hid)]

sinusoid_table np.array = ([get_posi_angle_vec (pos_i) para pos_i en Rango (n_position)])

sinusoid_table [0 :: 2:, ] = np.sin (sinusoid_table [:, 0 :: 2]) # dim 2i numeración sinusoidal
sinusoid_table [:, 1 :: 2] = np.cos (sinusoid_table [:, 1 :: 2]) # dim 2i + 1 coseno impar

IF padding_idx Ninguno no es:
# ZERO Dimensión del vector para el relleno de
sinusoid_table [padding_idx] = 0.

retorno torch.FloatTensor (sinusoid_table) # n_position × d_hid vector de posición obtenida de cada palabra

descripción de enlace: https: //blog.csdn.net/qq_33278884/article/details/88868808

Supongo que te gusta

Origin www.cnblogs.com/wisir/p/12461641.html
Recomendado
Clasificación