位置嵌入层。
pip install keras-pos-embd
基本使用方法和嵌入层一致,模式使用PositionEmbedding.MODE_EXPAND
:
from tensorflow import keras
from keras_pos_embd import PositionEmbedding
model = keras.models.Sequential()
model.add(PositionEmbedding(
input_shape=(None,),
input_dim=10, # 最大的位置的绝对值
output_dim=2, # 嵌入的维度
mask_zero=10000, # 作为padding的位置下标(因为0被占用了)
mode=PositionEmbedding.MODE_EXPAND,
))
model.compile('adam', 'mse')
model.summary()
如果跟在嵌入层使用,则不需要设置mask_zero
。嵌入特征与位置嵌入相加使用PositionEmbedding.MODE_ADD
模式,相连使用PositionEmbedding.MODE_CONCAT
模式:
from tensorflow import keras
from keras_pos_embd import PositionEmbedding
model = keras.models.Sequential()
model.add(keras.layers.Embedding(
input_shape=(None,),
input_dim=10,
output_dim=5,
mask_zero=True,
))
model.add(PositionEmbedding(
input_dim=100,
output_dim=5,
mode=PositionEmbedding.MODE_ADD,
))
model.compile('adam', 'mse')
model.summary()
三角函数嵌入没有可训练权重,使用方法和PositionEmbedding
相同,不需要输入的维度:
from tensorflow import keras
from keras_pos_embd import TrigPosEmbedding
model = keras.models.Sequential()
model.add(TrigPosEmbedding(
input_shape=(None,),
output_dim=30,
mode=TrigPosEmbedding.MODE_EXPAND,
))
model.compile('adam', 'mse')
model.summary()
相加模式:
from tensorflow import keras
from keras_pos_embd import TrigPosEmbedding
model = keras.models.Sequential()
model.add(keras.layers.Embedding(
input_shape=(None,),
input_dim=10,
output_dim=5,
mask_zero=True,
))
model.add(TrigPosEmbedding(
output_dim=5,
mode=TrigPosEmbedding.MODE_ADD,
))
model.compile('adam', 'mse')
model.summary()