简友广场想法散文

長短期記憶網絡

2023-01-22  本文已影响0人  花雪白芷

import torch.nn as nn

import torch

# 每個切片所包含的樣本的數量

batch_size =10

# 句子的长度

seq_len =20

# 每个词语的向量表示维数

embedding_dim =30

# 詞典的大小

vocab_size =100

# 隱藏狀態的大小

hidden_size =18

# 長短期網絡的層數

num_layer =2

# 隨機構造一個切片

# initial_stage  [batch_size:切片的大小,seq_len:句子的长度,embedding_dim:单个词的向量维数]

initial_stage = torch.randint(low=0, high=100, size=[batch_size, seq_len])

# 数据经过embedding处理

embedding = nn.Embedding(vocab_size, embedding_dim)

embedding_stage = embedding(initial_stage)

# 把embedding之后的数据传入lstm

"""

~~~input_size:輸入變量x的期望特征的數量大小,也就是embedding dim的大小~~~hidden_size:隱藏狀態的特征的數量大小~~~num_layers:循環神經網絡LSTM單元的個數,默認值為1。~~~bias:此變量為bool類型,當為假,意味著我們不設置偏置權重,默認值為1。~~~batch_first:此變量為bool類型,用來控制數據的輸入格式。若為真,輸入為[seq_len,batch,feature];若為假,輸入為[batch,seq_len,feature]。~~~dropout:dropout變量用來設置參數隨機失活的比例,默認值為0。~~~bidirectional:此變量為bool類型,若為真,我們將設置長短期神經網絡為雙向神經網絡。~~~proj_size: LSTM投影特征的數量的大小(大於0),默認值為0。"""

lstm = nn.LSTM(input_size=embedding_dim,

              hidden_size=hidden_size,

              num_layers=num_layer,

              bidirectional=False,

              batch_first=False)

output, (h_n, c_n) = lstm(embedding_stage)

# output [batch_size:切片的大小,seq_len:句子的长度,hidden_size:隐藏状态的大小]

# output把所有時間步上的數據進行了拼接

print(output.size())

print("—" *100)

# h_n [num_layers*bidirectional,batch_size:切片的大小,hidden_size: 隐藏状态的大小]

# 把不同層的隱藏狀態進行了拼接

print(h_n.size())

print("—" *100)

# c_n [num_layers*bidirectional,batch_size:切片的大小,hidden_size: 隐藏状态的大小]

print(c_n.size())

# 獲取最後一個時間步上的輸出

last_output = output[-1, :, :]

# 獲取最後一次的hidden_state

last_h_n = h_n[-1, :, :]

# 比較兩者是否相同

print(last_output == last_h_n)

上一篇下一篇

猜你喜欢

热点阅读