赞
踩
这里只着重介绍监督学习。
线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛,其表达形式为:y=w`x+e(e为误差服从均值为0 的正态分布)。
import torch from torch.nn import Linear, Module, MSELoss from torch.optim import SGD import numpy as np import pandas as pd import matplotlib import matplotlib.pyplot as plt import seaborn as sns torch.__version__ x = np.linspace(0,20,500) #array = numpy.linspace(start, end, num=num_points) #将在start和end之间生成一个统一的序列,共有num_points个元素。 y = 5 * x + 7 plt.plot(x,y) #plt.plot(x, y, "格式控制字符串", 关键字=参数),格式控制有颜色,线型,点型,关键字有边缘,填充等 x = np.random.rand(256) #生成256个点 noise = np.random.randn(256) / 4 #噪声 y = x * 5 + 7 + noise df = pd.DataFrame() #DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表。== #DataFrame的单元格可以存放数值、字符串等,这和excel表很像,同时DataFrame可以设置列名columns与行名index。 df['x'] = x df['y'] = y sns.lmplot(x='x', y='y', data=df) #seaborn.lmplot()方法用于将散点图绘制到FacetGrid上。,xy轴 model = Linear(1,1) #其中参数(1, 1)代表输入输出的特征(feature)数量都是1. criterion = MSELoss() optim = SGD(model.parameters(), lr=0.01) epochs = 3000 x_train = x.reshape(-1,1).astype('float32') y_train = y.reshape(-1,1).astype('float32') for i in range(epochs): # 整理输入和输出的数据,这里输入和输出一定要是torch的Tensor类型 inputs = torch.from_numpy(x_train) labels = torch.from_numpy(y_train) #使用模型进行预测 outputs = model(inputs) #梯度置0,否则会累加 optim.zero_grad() #计算损失 loss = criterion(outputs, labels) #反向传播 loss.backward() #使用优化器默认方法优化 optim.step() if (i % 100 ==0): #每 100次打印一下损失函数,看看效果 print('epoch {}, loss {:1.4f}'.format(i,loss.data.item())) [w,b] = model.parameters() print(w.item(), b.item()) predicted = model.forward(torch.from_numpy(x_train)).data.numpy() plt.plot(x_train, y_train, 'go', label='data', alpha=0.3) plt.plot(x_train, predicted, label = 'predicted', alpha=1) plt.legend() plt.show()
损失函数(loss function)是用来估量模型的预测值(我们例子中的output)与真实值(例子中的y_train)的不一致程度,它是一个非负实值函数,损失函数越小,模型的鲁棒性就越好。 我们训练模型的过程,就是通过不断的迭代计算,使用梯度下降的优化算法,使得损失函数越来越小。损失函数越小就表示算法达到意义上的最优。
因为PyTorch是使用mini-batch来进行计算的,所以损失函数的计算出来的结果已经对mini-batch取了平均
常见的损失函数:
对于普通的梯度下降法,一个epoch只能进行一次梯度下降;而对于Mini-batch梯度下降法,一个epoch可以进行Mini-batch的个数次梯度下降
torch.optim 是一个实现了各种优化算法的库。
#lr参数为学习率,对于SGD来说一般选择0.1 0.01.0.001
##如果设置了momentum,就是带有动量的SGD,可以不设置
optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
#我们的课程基本不会使用到RMSprop所以这里只给一个实例
optimizer = torch.optim.RMSprop(model.parameters(), lr=0.01, alpha=0.99)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.999), eps=1e-08)
高偏差的情况一般为欠拟合,即模型没有很好的去适配现有的数据,拟合度不够
高方差的情况一般称作过拟合,即模型对于训练数据的拟合度太高了,失去了泛化能力
如何解决欠拟合和过拟合:
欠拟合:
过拟合:
利用正则化来解决高方差的问题,正则化是在Cost function 中加入一项正则化项,惩罚模型的复杂度
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。