vocab = args.vocab_size ## 已知詞的數量
dim = args.embed_dim ##每個詞向量長度
cla = args.class_num ##類別數
ci = 1 ##輸入的channel數
knum = args.kernel_num ## 每種卷積核的數量
ks = args.kernel_sizes ## 卷積核list,形如[2,3,4]
self.embed = nn.embedding(vocab, dim) ## 詞向量,這裡直接隨機
self.convs = nn.modulelist([nn.conv2d(ci, knum, (k, dim)) for k in ks]) ## 卷積層
self.dropout = nn.dropout(args.dropout)
self.fc = nn.linear(len(ks) * knum, cla) ##全連線層
def forward(self, x):
x = self.embed(x) # (n,w,d) (batchsize,sentence_length,embedding_size)
x = x.unsqueeze(1) # (n,ci,w,d)
x = [f.relu(conv(x)).squeeze(3) for conv in self.convs] # len(ks)*(n,knum,w)
print("x length",len(x)) #x length 3
# print("x[0] shape",x[0].size()) #shape torch.size([64, 100, 18])
# print("x[1] shape",x[1].size()) #shape torch.size([64, 100, 17])
# print("x[2] shape",x[2].size()) # shape torch.size([64, 100,16])
x = [f.max_pool1d(line, line.size(2)).squeeze(2) for line in x] # len(ks)*(n,knum) 池化層
x = torch.cat(x, 1) # (n,knum*len(ks)) ([64, 300])
x = self.dropout(x)
logit = self.fc(x)
#print("logit size",logit.size()) #[batchsize,num_classes]
return logit
Pytorch 卷積神經網路
一般而言,輸入層的大小應該能夠被2整除很多次,常用32,64,96,224 盡可能使用小尺寸的濾波器,例如3 3,滑動步長選擇1。需要對輸入資料體進行零填充,保證輸出和輸入一樣的空間大小 對輸入資料空間進行下取樣 不使用的話,會導致影象邊緣資訊過快地損失掉 沒有人能在一開始就想清楚,只有開始做了,你...
Pytorch(二)定義卷積神經網路
個人認為神經網路的的搭建 雖然很簡單,但是確實最為重要的一部分。話不多說,開始介紹。1 init 初始化網路,定義網路的一些引數,以及他的層結構 2 forward 定義層結構之間的關係 可能沒太看明白,沒關係看了 你就會很清晰了 import torch import torch.nn as nn...
pytorch學習 構建卷積神經網路
本文是對隧道 https org tutorials beginner blitz neural networks tutorial.html sphx glr beginner blitz neural networks tutorial py 的總結。其中 部分按照自己的習慣有所變動。構建神經網...