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)
网友评论