長短期記憶網絡

作者: 花雪白芷 | 来源:发表于2023-01-22 14:11 被阅读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)

    相关文章

      网友评论

        本文标题:長短期記憶網絡

        本文链接:https://www.haomeiwen.com/subject/mnmkhdtx.html