我正在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])
我的损失更大。