【2】训练和预测

数据、代码等相关资料来源于b站日月光华老师视频,此博客作为学习记录。

1.输入数据的处理
2.创建模型
3.训练
4.预测、评价

接上文代码:

import torch
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from torch import nn

data = pd.read_csv(r'E:\Code\pytorch\第2章\Income1.csv')
plt.scatter(data.Education, data.Income)    
plt.xlabel('Education')                   

 1. List item

plt.ylabel('Income')                      
plt.show()

X = torch.from_numpy(data.Education.values.reshape(-1, 1)).type(torch.FloatTensor)
Y = torch.from_numpy(data.Income.values.reshape(-1, 1)).type(torch.FloatTensor)


class EIModel(nn.Module):     
    def __init__(self):     
        super(EIModel,self).__init__()
        self.linear = nn.Linear(in_features=1, out_features=1)   
    def forward(self, input):   
        logits = self.linear(input)
        return logits     
model = EIModel()     

以均方误差作为回归的loss,在nn中调用,可看到:
在这里插入图片描述
建立损失函数和优化函数:

loss_fn = nn.MSELoss()     # 定义损失函数
opt = torch.optim.SGD(model.parameters(), lr=0.0001)      # 定义优化函数,优化权重和偏置使得输出与target越相似越好
# 随机梯度下降SGD

建立好的模型、损失函数和优化方法,对数据进行5000次迭代:

for epoch in range(5000):    # 全部数据优化5000次
    for x,y in zip(X,Y):    # X,Y同时迭代
        y_pred = model(x)   # x被forward调用得到一个输出
        loss = loss_fn(y_pred, y)
        opt.zero_grad()  # 优化时梯度会积累,在每个epoch内要求梯度清零
        loss.backward()   # 通过loss去反向传播,看参数是往什么方向移动
        opt.step()   # 损失优化参数

结果图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

要努力的小菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值