【发布时间】:2020-02-28 14:34:19
【问题描述】:
我有一个神经网络,我用它来进行二元分类。我改变训练数据的大小并在测试集上进行预测。通过查看结果,tp 和 fn 之间的差异始终相同,tn 和 fp 之间的差异始终相同。例如,在迭代 #2 中,tp#2 - tp#1 = -91 和 fn#2 - fn#1 = +91。另外,fp#2 - fp#1 = -46 和 tn#2 - tn#1 = +46。再举一个例子,tp#3 - tp#2 = -35 和 fn#2 - fn#2 = +35。
Iteration #1
tn=119, fp=173, fn=110, tp=407
Iteration #2
tn=165, fp=127, fn=201, tp=316
Iteration #3
tn=176, fp=116, fn=236, tp=281
Iteration #4
tn=157, fp=135, fn=207, tp=310
Iteration #5
tn=155, fp=137, fn=214, tp=303
我尝试了各种神经网络架构,但我总是得到相同的数字。你知道出了什么问题吗?
以下是我使用的一个非常简单的网络:
class AllCnns(nn.Module):
def __init__(self, vocab_size, embedding_size):
torch.manual_seed(0)
super(AllCnns, self).__init__()
self.word_embeddings = nn.Embedding(vocab_size, embedding_size)
self.conv1 = nn.Conv1d(embedding_size, 64, 3)
self.drop1 = nn.Dropout(0.3)
self.max_pool1 = nn.MaxPool1d(2)
self.flat1 = nn.Flatten()
self.fc1 = nn.Linear(64*80, 100)
self.fc2 = nn.Linear(100, 1)
def forward(self, sentence):
embedding = self.word_embeddings(sentence).permute(0, 2, 1)
conv1 = F.relu(self.conv1(embedding))
drop1 = self.drop1(conv1)
max_pool1 = self.max_pool1(drop1)
flat1 = self.flat1(max_pool1)
fc1 = F.relu(self.fc1(flat1))
fc2 = torch.sigmoid(self.fc2(fc1))
return fc2
【问题讨论】:
标签: neural-network pytorch conv-neural-network