#pt#课堂笔记_6 logistic回归
-mnist

Torchvision里面已经有了一些数据集
Train要训练集还是测试集
要下载就设置True不用下载则False
-cifar-10
32*32的小图片分为十类,训练集五万个测试集1万样本
-logistic函数

在x=+-5左右会接近饱和情况
这个sigmoid函数的导数类似于正态分布
输出的值就是通过的概率,不是说它会直接表示概率,而是我们想要表示概率则必须让输出值在0-1之间。
以下均为sigmoid函数,只是logistic函数最有代表性。


激活函数:我们希望输出值在0到+1之间 我们会用logistic函数
如果我们希望输出值在-1到+1之间则会用tanh函数等

原来mse是计算两个实数值之间的差值,计算距离,希望距离最小化
现在输出是分布,计算的是分布的差异。

我们可以用这个式子表示两个分布间的差异性大小。希望它越小越好。
-称二分类的损失为BCE
Y_hat经过一次sigmoid为分数,再经过log如果不加负号会变为负数
-模型的改变


import torch.nn class LinearModel(torch.nn.Module): def __init__(self): super(LinearModel).__init__() self.linear = torch.nn.Linear(1,1) def forward(self): y_pred = self.linear(x) return y_pred
-BCS CE指交叉熵

如果求平均,损失变小了,导数变小,此处会影响我们如何选择学习率。

import torch.nn import torch.nn.functional as F x_data = torch.tensor([[1.0],[2.0],[3.0]]) y_data = torch.tensor([[0.0],[1.0],[0.0]]) class LinearModel(torch.nn.Module): def __init__(self): super(LinearModel, self).__init__() self.linear = torch.nn.Linear(1,1) def forward(self,x): y_pred = F.sigmoid(self.linear(x)) return y_pred model = LinearModel() criterion = torch.nn.BCELoss(size_average=False) optimizer = torch.optim.SGD(model.parameters(),lr=0.01) for epoch in range(100): 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.data) import numpy as np import matplotlib.pyplot as plt import torch.nn import torch.nn.functional as F x_data = torch.tensor([[1.0],[2.0],[3.0]]) y_data = torch.tensor([[0.0],[0.0],[1.0]]) class LinearModel(torch.nn.Module): def __init__(self): super(LinearModel, self).__init__() self.linear = torch.nn.Linear(1,1) def forward(self,x): y_pred = F.sigmoid(self.linear(x)) return y_pred model = LinearModel() criterion = torch.nn.BCELoss(size_average=False) optimizer = torch.optim.SGD(model.parameters(),lr=0.01) 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.data) x = np.linspace(0,10,200) ##0-10个小时采200个点 x_t= torch.Tensor(x).view((200,1)) ##变为200行一列的矩阵 y_t= model(x_t) y = y_t.data.numpy() plt.plot(x,y) plt.xlabel('hours') plt.plot([0,10],[0.5,0.5],c='r') plt.ylabel('probability of pass') plt.grid() plt.show()

浙公网安备 33010602011771号