所有训练一次或逐行训练

时间:2017-12-30 18:46:28

标签: python logistic-regression

我正在python上构建简单的逻辑回归。 我的训练集如下:

X = [[2,3],[6,5],...]

y = [[1],[0],[0],...]

当我训练我的套装时,我逐一为x(i)提供y(i)并计算他们的损失。

正如您所期望的那样,我的for循环的长度为x(行数= m)。

好像没问题。但当我试图立即喂养整套时,我的损失有所改善。我的for循环然后按我选择的任何数字。

这是为什么?我认为这是逻辑回归的逐行计算。

编辑(这是我的旧代码。你可以看到我正在逐行喂食。)

dataset = np.loadtxt(".\logisticdata.txt",dtype=np.float32,delimiter=",")


x = dataset[:,(0,1)]
y = dataset[:,2]

x = x.reshape((100,2))
y = y.reshape((100,1))


class Net(torch.nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        self.n11 = torch.nn.Linear(2,1)
        self.sgn = torch.nn.Sigmoid()

        """
        self.sigmoid = torch.nn.Sigmoid()
        self.n21 = torch.nn.Linear(1,1)
"""
    def forward(self, *input):
        out = self.n11(*input)
        out = self.sgn(out)
        """
        out = self.sigmoid(out)
        out = self.n21(out)
"""
        return out

net = Net()

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


for epoch in range(100):
    for xi,yi in zip(x,y):

        xi = Variable(torch.from_numpy(xi))
        yi = Variable(torch.from_numpy(yi))

        optimizer.zero_grad()
        output = net(xi)
        loss = criterion(output,yi)
        loss.backward()
        optimizer.step()

        print("Loss",loss.data[0])

但是当我这样改变时:

xi = Variable(torch.from_numpy(x))
yi = Variable(torch.from_numpy(y))

for epoch in range(150000):
    optimizer.zero_grad()
    output = net(xi)
    loss = criterion(output, yi)
    loss.backward()
    optimizer.step()

    print("Loss", loss.data[0])

我的损失更大。

0 个答案:

没有答案