參考:torch.nn.lstm()的引數:
lstm輸出:
通常定義乙個1層雙向lstm模型如下:(ner任務,輸出是對每個字分類)
import torch
import torch.nn as nn
class mybilstm(nn.module):
def __init__(self, vocab_size, embedding_dim, hidden_dim, tag_size):
super(mybilstm, self).__init__()
self.vocab_size = vocab_size
self.embedding_dim = embedding_dim
self.hidden_dim = hidden_dim
self.tag_size = tag_size
self.embedding_layer = nn.embedding(vocab_size, embedding_dim)
self.lstm_layer = nn.lstm(embedding_dim, hidden_dim, num_layers=1, bidirectional=true, batch_first=true)
# *2因為是雙向的
self.output_layer = nn.linear(hidden_dim * 2, tag_size)
def init_hidden(self, batch_size):
# 正太分布, num_layer=2, 因為是雙向的
return (torch.randn(2, batch_size, self.hidden_dim), torch.randn(2, batch_size, self.hidden_dim))
def forward(self, input):
self.hidden = self.init_hidden(len(input))
embeds = self.embedding_layer(input)
lstm_out, self.hidden = self.lstm_layer(embeds, self.hidden)
model_out = self.output_layer(lstm_out)
return model_out
model = mybilstm(5, 10, 10, 4) # 5x10x10x4的lstm
input = torch.tensor([[0, 1, 2, 3, 4]]) # 輸入5個字元
print(model(input)) # 輸出5x4的矩陣
pytorch lstm 寫詩文的魔改,測試,猜想
首先目前自然語言處理的網路基本都是transformers的變體。我們就不從熱鬧了,就使用簡單的fc層設計乙個,首先一般自然語言都是乙個概率問題,所以就是乙個分類問題,一般都是有多少的字就分為多少類,一般的輸入是語句的編碼或者位置編碼,一般的輸出是乙個多組多分類 一句話有多個字這個字是哪個字 但是,...
xgboost簡單介紹 xgboost介紹
xgboost是華盛頓大學博士陳天奇創造的乙個梯度提公升 gradient boosting 的開源框架。至今可以算是各種資料比賽中的大殺器,被大家廣泛地運用。接下來,就簡單介紹一下xgboost和普通的gbdt相比,有什麼不同。何為gradient boosting,gbdt請看我上篇文章 1.梯...
mysql的簡單介紹 mysql的簡單介紹
mysql的簡單介紹 資料庫的內部鏈結 1 連線管理器 使用者或應用程式連線 2 分析器 3 快取區4 優化器 優化器執行的結果交由儲存引擎,再轉向物理層 表空間 myisam每個表有三個檔案 frm 表結構 myd 表資料 myi 表索引 innodb 所有表空間再乙個檔案 資料庫失敗的原因 1 ...