自学内容网 自学内容网

Pytorch复习(二)

一、非线性回归

import torch
import matplotlib.pyplot as plt
from torch import nn,optim
from torch.autograd import Variable
import numpy as np

x_data = np.linspace(-2,2,200)[:,np.newaxis]
noise = np.random.normal(0,0.2,x_data.shape)
y_data = np.square(x_data) + noise


plt.scatter(x_data,y_data)
plt.show()

#数据处理
x_data = x_data.reshape(-1,1)
y_data = y_data.reshape(-1,1)

#把numpy数据变成tensor
x_data = torch.FloatTensor(x_data)
y_data = torch.FloatTensor(y_data)
#数据输入
inputs = Variable(x_data)
#数据标签
target = Variable(y_data)

#构建神经网络模型
class LinearRegression(nn.Module):
    #定义网络结构
    def __init__(self):
        super(LinearRegression,self).__init__()
        self.linear = nn.Linear(1,10)
        self.tanh = nn.Tanh()
        self.fc2 = nn.Linear(10,1)

    #定义网络计算
    def forward(self,x):
        x = self.linear(x)
        x = self.tanh(x)
        x = self.fc2(x)
        return x

#定义模型
model = LinearRegression()
#定义代价函数
mse_loss = nn.MSELoss()
#定义优化器
optimizer = optim.SGD(model.parameters(),lr=0.3)

for name,parameters in model.named_parameters():
    print('name:{},parameters:{}'.format(name,parameters))

for i in range(2001):
    #得到模型的输出值(预测值)
    out = model(inputs)
    #计算损失
    loss = mse_loss(out,target)
    #梯度清零
    optimizer.zero_grad()
    #计算梯度
    loss.backward()
    #修改权值
    optimizer.step()
    if i % 200 == 0:
        print(i,loss.item())
#预测
y_pred = model(inputs)
plt.scatter(x_data,y_data)
plt.plot(x_data,y_pred.data.numpy(),'r-',lw=3)
plt.show()

二、Softmax激活函数

三、交叉熵讲解

四、过拟合与抵抗过拟合的方式

回归拟合:

过拟合导致测试误差变大

防止过拟合的方法:增大数据集、 Early stopping(一种提前结束训练的策略用来防止过拟合)、Dropout (选取某几个节点不进行计算)、正则化项 、

五、Pytorch中的优化器

Adadelta、Adagrad、Adam、Adamax、AdamW、ASGD、LBFGS、RMSprop、Rprop、SGD、SparseAdam

常用优化器为SGD与Adam


原文地址:https://blog.csdn.net/weixin_64443786/article/details/143082194

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!