第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將循環(huán)層附加到具有不同隱藏大小的 PyTorch LSTM 模型

將循環(huán)層附加到具有不同隱藏大小的 PyTorch LSTM 模型

動漫人物 2021-09-11 10:27:10
我正在使用 PyTorch 開發(fā)用于序列分析的 BI-LSTM 模型。我正在使用torch.nn.LSTM. 使用該模塊,您可以擁有多個層,只需傳遞一個參數num_layers作為層數(例如,num_layers=2)。然而,它們都是相同的hidden_size,這對我來說部分好,我只是想讓它們都一樣,hidden_size 但最后一層的大小不同?;臼纠缦拢簉nn = nn.LSTM(input_size=10, hidden_size=20, num_layers=2)inp = torch.randn(5, 3, 10)h0 = torch.randn(2, 3, 20)c0 = torch.randn(2, 3, 20)output, (hn, cn) = rnn(inp, (h0, c0))輸出昏暗為 ( 5, 3,20)一個解決方案(但對我不利)是實現額外的模型,該模型輸出我需要的維度并從第一個模型中獲取輸入,例如:rnn_two = nn.LSTM(input_size=20, hidden_size=2)output2, _ = rnn_two(output)但是,我不想這樣做,因為我使用并行化模型DataParallel,所以我需要全部成為一個包。我希望找到類似于 keras 的東西,例如:rnn.add(LSTM, hidden_size=2)我檢查了LSTM 源代碼,但找不到我需要的。有什么建議?
查看完整描述

2 回答

?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

如果我沒記錯的話,可以這樣做:


import torch.nn as nn

import torch.nn.functional as F


class RnnWith2HiddenSizesModel(nn.Module):

    def __init__(self):

        super(RnnWith2HiddenSizesModel, self).__init__()

        self.rnn = nn.LSTM(input_size=10, hidden_size=20, num_layers=2)

        self.rnn_two = nn.LSTM(input_size=20, hidden_size=2)


    def forward(self, inp, hc):

        output, _ = self.rnn(inp, hc)

        output2, _ = self.rnn_two(output)

        return output2



inp = torch.randn(5, 3, 10)

h0 = torch.randn(2, 3, 20)

c0 = torch.randn(2, 3, 20)


rnn = RnnWith2HiddenSizesModel()


output = RnnWith2HiddenSizesModel()(inp, (h0, c0))



tensor([[[-0.0305,  0.0327],

     [-0.1534, -0.1193],

     [-0.1393,  0.0474]],


    [[-0.0370,  0.0519],

     [-0.2081, -0.0693],

     [-0.1809,  0.0826]],


    [[-0.0561,  0.0731],

     [-0.2307, -0.0229],

     [-0.1780,  0.0901]],


    [[-0.0612,  0.0891],

     [-0.2378,  0.0164],

     [-0.1760,  0.0929]],


    [[-0.0660,  0.1023],

     [-0.2176,  0.0508],

     [-0.1611,  0.1053]]], grad_fn=<CatBackward>)


查看完整回答
反對 回復 2021-09-11
?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

盡管@Mikhail Berlinkov 的回答按需要工作這一事實,但它并沒有推廣到一般情況(甚至在問題中都沒有要求),為此我想提出第二個解決方案:


import torch

import torch.nn as nn

import torch.nn.functional as F

from functools import reduce


class RNNModel(nn.Module):

    def __init__(self, *models):

        super(RNNModel, self).__init__()

        self.models = models


    def forward(self, inp):

        return reduce(lambda arg, model: model(arg, None)[0], self.models, inp)

并且可以稱為:


rnn = nn.LSTM(input_size=10, hidden_size=20, num_layers=2)

rnn_two = nn.LSTM(input_size=20, hidden_size=2)

inp = torch.randn(5, 3, 10)


rnn_model = RNNModel(rnn, rnn_two)


output = rnn_model(inp)

output.shape等于預期(即,5,3,2)


查看完整回答
反對 回復 2021-09-11
  • 2 回答
  • 0 關注
  • 338 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號