#公式1
defget_positional_encoding
(max_seq_len,embed_dim)
:#初始化乙個positional encoding
#embed_dim: 字嵌入維度
#max_seq_len: 最大序列長度
positional_encoding = np.array(
[[pos/np.power(
10000,2
*i/embed_dim)
for i in
range
(embed_dim)
]if pos !=
0else np.zeros(embed_dim)
for pos in
range
(max_seq_len)])
positional_encoding[1:
,0::
2]= np.sin(positional_encoding[1:
,0::
2]) positional_encoding[1:
,1::
2]= np.cos(positional_encoding[1:
,1::
2])return positional_encoding
#公式2
class
positionalencoding
(nn.module)
:"implement the pe function."
def__init__
(self, d_model, dropout, max_len=
5000):
#d_model=512,dropout=0.1,
#max_len=5000代表事先準備好長度為5000的序列的位置編碼,其實沒必要,
#一般100或者200足夠了。
super
(positionalencoding, self)
.__init__(
) self.dropout = nn.dropout(p=dropout)
# compute the positional encodings once in log space.
pe = torch.zeros(max_len, d_model)
#(5000,512)矩陣,保持每個位置的位置編碼,一共5000個位置,
#每個位置用乙個512維度向量來表示其位置編碼
position = torch.arange(
0, max_len)
.unsqueeze(1)
# (5000) -> (5000,1)
div_term = torch.exp(torch.arange(
0, d_model,2)
*-(math.log(
10000.0
)/ d_model)
)# (0,2,…, 4998)一共準備2500個值,供sin, cos呼叫
pe[:,
0::2
]= torch.sin(position * div_term)
# 偶數下標的位置
pe[:,
1::2
]= torch.cos(position * div_term)
# 奇數下標的位置
pe = pe.unsqueeze(0)
# (5000, 512) -> (1, 5000, 512) 為batch.size留出位置
self.register_buffer(
'pe'
, pe)
defforward
(self, x)
: x = x + variable(self.pe[:,
:x.size(1)
], requires_grad=
false
)# 接受1.embeddings的詞嵌入結果x,
#然後把自己的位置編碼pe,封裝成torch的variable(不需要梯度),加上去。
#例如,假設x是(30,10,512)的乙個tensor,
#30是batch.size, 10是該batch的序列長度, 512是每個詞的詞嵌入向量;
#則該行**的第二項是(1, min(10, 5000), 512)=(1,10,512),
#在具體相加的時候,會擴充套件(1,10,512)為(30,10,512),
#保證乙個batch中的30個序列,都使用(疊加)一樣的位置編碼。
return self.dropout(x)
# 增加一次dropout操作
# 注意,位置編碼不會更新,是寫死的,所以這個class裡面沒有可訓練的引數。
常用排序演算法及其實現
1.插入排序 遍歷陣列 n 將每個元素插入到前面子串行的合適位置 插入時採取前面的部分元素後移,再將本元素填在適當位置的方法 模擬 12 30 9 100 1 3 10 12 30 9 100 1 3 10 9 12 30 100 1 3 10 9 12 30 100 1 3 10 1 9 12 3...
常用排序演算法及其實現
1.插入排序 遍歷陣列 n 將每個元素插入到前面子串行的合適位置 插入時採取前面的部分元素後移,再將本元素填在適當位置的方法 模擬 12 30 9 100 1 3 10 12 30 9 100 1 3 10 9 12 30 100 1 3 10 9 12 30 100 1 3 10 1 9 12 3...
code及其實現
1.what is code?編碼並不是我隨便亂取的名字,其原理在資訊檢索導論第5章第3節有介紹,用於壓縮一連串有序的數字型別的資料非常有用。在mg中將 編碼歸類為全域性模型 mg更推崇區域性模型 其原理是將所有的資料分成兩部分連起來,第一部分為資料長度,第二部分為資料內容。這樣做的好處是對於很小的...