Я использую lstm в Pytorch и хочу рассчитать точность обучения. Я нашел один подобный вопрос здесь: Рассчитать точность каждой эпохи в PyTorch , но это не то, что я хочу сделать, потому что я не хочу применять какой-либо случайный порог вручную. Есть ли другой способ вычислить точность, основанную на потере, которую я получаю?
Это модель, которую я сделал. Вывод выполнен в виде 1D-тензора, содержащего значения от 0 до 1. Я пытаюсь выяснить точность обучения модели.
class fullstop(nn.Module):
def __init__(self):
super(fullstop, self).__init__()
self.seq1=nn.LSTM(input_size=300,hidden_size=200)
self.fc1=nn.Linear(400,400)
self.relu1 = nn.ReLU()
self.dout = nn.Dropout(0.2)
self.fc2 = nn.Linear(400, 100)
self.prelu = nn.PReLU(1)
self.out = nn.Linear(100, 1)
self.out_act = nn.Sigmoid()
self.fcf=nn.Linear(4,1)
def forward(self,input1,input2):
prefix1,h1=self.seq1(input1)
suffix1,h2=self.seq1(input2)
prefix1=Variable(prefix1)
suffix1=Variable(suffix1)
result=torch.cat((prefix1,suffix1),-1)
a1 = self.fc1(result)
h1 = self.relu1(a1)
dout = self.dout(h1)
a2 = self.fc2(dout)
h2 = self.prelu(a2)
a3 = self.out(h2)
y = self.out_act(a3)
t = torch.rand(len(input1), 4, 1)[:, :, -1]
tf=F.sigmoid(self.fcf(t))
t_final=tf[:,-1]
return t_final
FullStop=fullstop()
for t in range(num_epochs):
# Forward pass
y_pred = FullStop(X1,X2)
loss = loss_fn(y_pred, y_actual)
if t % 10 == 0:
print("Epoch ", t, "loss1: ", loss.item())
hist[t] = loss.item()
# Zero out gradient, else they will accumulate between epochs
optimiser.zero_grad()
# Backward pass
loss.backward()
# Update parameters
optimiser.step()