TensorFlow 和 Torch 中的二元分类精度差异

问题描述 投票:0回答:1

我正在研究二元分类问题。在下面的 torch 代码中,我一直获得 2.5% 的准确率。

class SimpleClassifier(nn.Module):
    def __init__(self, input_size, hidden_size1, hidden_size2, output_size):
        super(SimpleClassifier, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size1)
        self.relu1 = nn.ReLU()
        self.fc2 = nn.Linear(hidden_size1, hidden_size2)
        self.relu2 = nn.ReLU()
        self.fc3 = nn.Linear(hidden_size2, output_size)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        x = self.relu1(self.fc1(x))
        x = self.relu2(self.fc2(x))
        x = self.sigmoid(self.fc3(x))
        return x

input_size = train_X.shape[1]
hidden_size1 = 64
hidden_size2 = 32
output_size = 1 
model = SimpleClassifier(input_size, hidden_size1, hidden_size2, output_size)

criterion = nn.BCELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)


num_epochs = 50
for epoch in range(num_epochs):
    for inputs, labels in train_dataloader:
        optimizer.zero_grad()
        outputs = model(inputs)
        
        # Reshape labels to match the shape of the outputs
        labels = labels.view(-1, 1)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
    # Evaluation on the test set
    with torch.no_grad():
        model.eval()
        predictions = model(test_X).squeeze()
        predictions_binary = (predictions.round()).float()
        accuracy = torch.sum(predictions_binary == test_Y) / (len(test_Y) * 100)
        if(epoch%25 == 0):
          print("Epoch " + str(epoch) + " passed. Test accuracy is {:.2f}%".format(accuracy))

但是,在下面的 Tensorflow 代码中,我得到的准确率约为 86%

model = Sequential()
model.add(Dense(64, input_dim=len(train_X[0]), activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(1, activation='sigmoid'))  # assuming binary classification

# Compile the model
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])


model.fit(train_X, train_Y, epochs=50, batch_size=64)

# Evaluate the model
loss, accuracy = model.evaluate(test_X, test_Y)
print(f"Loss: {loss}, Accuracy: {accuracy}")

我相信我的火炬代码确实有问题,但我不明白我错过了什么?我该如何解决?

python tensorflow deep-learning pytorch
1个回答
0
投票

我认为你可以解决的问题之一是:

accuracy = torch.sum(predictions == test_Y).item() / len(test_Y) * 100

百分比转换顺序错误

© www.soinside.com 2019 - 2024. All rights reserved.