代码之家  ›  专栏  ›  技术社区  ›  blue-sky

理解火把预言

  •  0
  • blue-sky  · 技术社区  · 7 年前

    对于我的训练模型,此代码:

    model(x[0].reshape(1,784).cuda())
    

    返回:

    tensor([[-1.9903, -4.0458, -4.1143, -4.0074, -3.5510,  7.1074]], device='cuda:0')
    

    我的网络模型定义为:

    # Hyper-parameters 
    input_size = 784
    hidden_size = 50
    num_classes = 6
    num_epochs = 5000
    batch_size = 1
    learning_rate = 0.0001
    
        criterion = nn.CrossEntropyLoss()
        optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)  
    
            class NeuralNet(nn.Module):
                def __init__(self, input_size, hidden_size, num_classes):
                    super(NeuralNet, self).__init__()
                    self.fc1 = nn.Linear(input_size, hidden_size) 
                    self.relu = nn.ReLU()
                    self.fc2 = nn.Linear(hidden_size, num_classes)  
    
                def forward(self, x):
                    out = self.fc1(x)
                    out = self.relu(out)
                    out = self.fc2(out)
                    return out
    

    我试图理解返回值:

    张量([[-1.9903,-4.0458,-4.1143,-4.0074,-3.5510,7.1074]],设备='cuda:0')
    

    值7.1074是张量数组中最大值的可能性吗?由于7.1074位于位置5,因此此处预测输入x[0]的相关输出值是否为5?如果是这样,这背后的直觉是什么?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Zenith    7 年前

    免责声明:我不太了解pytorch,但我是根据其他库和我所知道的一般标准实践来猜测的。

    我相信这是最后一层的输出,也就是fc2线性变换。因此,预测的类别将是类别5,具有最高的值。

    你可以把它看作是一种“原始”概率分布类型的范围,通常通过softmax压缩到范围(0,1)中。