深度學習常用公式及其實現

2021-10-19 07:10:30 字數 2469 閱讀 2667

#公式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更推崇區域性模型 其原理是將所有的資料分成兩部分連起來,第一部分為資料長度,第二部分為資料內容。這樣做的好處是對於很小的...