文章目录
一、数据集载入
1.MNIST
import torchvision
train_set = torchvision.datasets.MNIST(root='../dataset/mnist', train=True, download=True)
test_set = torchvision.datasets.MNIST(root='../dataset/mnist', train=False, download=True
2.The CIFAR-10
import torchvision
train_set = torchvision.datasets.CIFAR10(root='../dataset/mnist', train=True, download=True)
test_set = torchvision.datasets.CIFAR10(root='../dataset/mnist', train=True, download=True)
二、Sigmoid函数
1.logist函数
优点:
- 他的输入范围是− ∞ → + ∞,值域为(0,1),正好满足概率分布为在(0,1)的要求。我们用概率去描述分类器,自然比单纯的某个阈值要方便很多。
- 他是一个单调上升的函数,具有良好的连续性,不存在不连续点。
2.其余激活函数
3.sigmoid()的三种调用的方式
torch.sigmoid()、torch.nn.Sigmoid()和torch.nn.functional.sigmoid()三者之间的区别
三、BCE损失函数(二分类交叉熵)
预测与标签越接近,BCE损失越小。
四、代码实现
import torch
# import torch.nn.functional as F
# prepare dataset
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [0], [1]])
# design model using class
class LogisticRegressionModel(torch.nn.Module):
def __init__(self):
super(LogisticRegressionModel, self).__init__()
self.linear = torch.nn.Linear(1, 1)
def forward(self, x):
# y_pred = F.sigmoid(self.linear(x))
y_pred = torch.sigmoid(self.linear(x))
return y_pred
model = LogisticRegressionModel()
# construct loss and optimizer
# 默认情况下,loss会基于element平均,如果size_average=False的话,loss会被累加。
criterion = torch.nn.BCELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# training cycle forward, backward, update
for epoch in range(1000):
y_pred = model(x_data)
loss = criterion(y_pred, y_data)
print(epoch, loss.item())
optimizer.zero_grad()
loss.backward()
optimizer.step()
print('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred = ', y_test.item())
运行结果:
...
...
996 1.133521318435669
997 1.1329439878463745
998 1.1323673725128174
999 1.1317912340164185
w = 1.0537207126617432
b = -2.5526034832000732
y_pred = 0.8405437469482422