美文网首页
PyTrch深度学习简明实战1 - 线性回归

PyTrch深度学习简明实战1 - 线性回归

作者: 薛东弗斯 | 来源:发表于2023-03-03 20:42 被阅读0次

清华大学出版社-图书详情-《PyTorch深度学习简明实战》 (tsinghua.edu.cn)

数据集

income1.csv
    Unnamed: 0  Education     Income
0            1  10.000000  26.658839
1            2  10.401338  27.306435
2            3  10.842809  22.132410
3            4  11.244147  21.169841
4            5  11.645485  15.192634
5            6  12.086957  26.398951
6            7  12.488294  17.435307
7            8  12.889632  25.507885
8            9  13.290970  36.884595
9           10  13.732441  39.666109
10          11  14.133779  34.396281
11          12  14.535117  41.497994
12          13  14.976589  44.981575
13          14  15.377926  47.039595
14          15  15.779264  48.252578
15          16  16.220736  57.034251
16          17  16.622074  51.490919
17          18  17.023411  61.336621
18          19  17.464883  57.581988
19          20  17.866221  68.553714
20          21  18.267559  64.310925
21          22  18.709030  68.959009
22          23  19.110368  74.614639
23          24  19.511706  71.867195
24          25  19.913043  76.098135
25          26  20.354515  75.775218
26          27  20.755853  72.486055
27          28  21.157191  77.355021
28          29  21.598662  72.118790
29          30  22.000000  80.260571
import torch
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from torch import nn

# print(torch.__version__)

data = pd.read_csv('./income1.csv')
# print(data.head())   # 数据集只有2列,分别是education和income
# print(data.info())   # 都是float类型,可以直接进行运算。如果是字符串类型,则需要进行更改。

# plt.scatter(data.Education,data.Income)
# plt.xlabel('Education')
# plt.ylabel('Income')
# plt.show()

# X = data.Education.values   # 取出1维的ndarray数据。 data.Education是Series
# X = data.Education.values.reshape(-1,1)  # 第一个维度-1 表示自动计算,第2个维度指定为1; 生成30个维度为1的输入。
# torch.from_numpy(data.Education.values.reshape(-1,1)   # torch.from_numpy 从ndarray创建tensor
X = torch.from_numpy(data.Education.values.reshape(-1,1)).type(torch.FloatTensor)  #转换为FloatTensor类型
Y = torch.from_numpy(data.Income.values.reshape(-1,1)).type(torch.FloatTensor)
# print(X.shape)
# print(Y.shape)

# pytorch创建模型,必须自己新定义一个类。这个类必须继承自nn.Module
class EIModel(nn.Module):   # 创建一个新的类EIModel,这个类必须继承至父类nn.Module
    def __init__(self):     # 必须重新定义初始化方法。
        super(EIModel, self).__init__()
        # 我们的权重 f=wx+b,对应pytorch是linear层,初始化w和b,对输入进行加权。
        # linear层就是自己初始化w,乘以输入,再加b
        self.linear = nn.Linear(in_features=1,out_features=1)
    def forward(self,inputs):  # 定义forward方法。 定义如何进行前向传播
        logits = self.linear(inputs)  # 再self.linear层进行调用,返回输入logits
        return logits

model = EIModel()   # 类的实例化
loss_fn = nn.MSELoss()  # 定义均方差损失函数
opt = torch.optim.SGD(model.parameters(),lr=0.0001)
# 通过model.parameters返回模型的可训练参数. lr 学习率。

for epoch in range(5000):
    for x,y in zip(X,Y):  # zip函数,X与Y同时迭代
        y_pred = model(x)  # 调用forward方法,得到输出
        loss = loss_fn(y_pred, y)
        opt.zero_grad()  # 1. 将之前的梯度清零
        loss.backward()  # 2. 损失反向传播
        opt.step()  # 3.优化器
print('Down!')

print(list(model.named_parameters()))  #输出优化后的参数
# print(model.linear.weight, model.linear.bias)

plt.scatter(data.Education, data.Income, label='real data') #绘制原始散点图
plt.plot(X,model(X).detach().numpy(),c='r',label='predicted line')
plt.xlabel('Education')
plt.ylabel('Income')
plt.legend()
plt.show()
image.png
import torch
import pandas as pd

data = pd.read_csv('./income1.csv')
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)

w = torch.randn(1, requires_grad=True)
b = torch.zeros(1, requires_grad=True)
# 模型公式 y = w@x + b

learning_rate=0.0001

for epoch in range(5000):
    for x,y in zip(X,Y):
        y_pred = torch.matmul(x, w) + b           # 1. 使用模型进行预测
        loss = (y - y_pred).pow(2).mean()         # 2. 根据预算结果计算损失
        if not w.grad is None:                    # 3. 将梯度清零
            w.grad.data.zero_()
        if not b.grad is None:
            b.grad.data.zero_()
        loss.backward()                           # 4. 求梯度
        with torch.no_grad():
            w.data -= w.grad.data*learning_rate   # 5. 优化模型参数
            b.data -= b.grad.data*learning_rate

print(w)
print(b)

tensor([4.9734], requires_grad=True)
tensor([-28.3475], requires_grad=True)

相关文章

  • PyTrch深度学习简明实战1 - 线性回归

    清华大学出版社-图书详情-《PyTorch深度学习简明实战》 (tsinghua.edu.cn)[http://w...

  • PyTrch深度学习简明实战2 -逻辑回归

  • 深度学习-1

    深度学习基础 介绍单层神经网络:线性回归和softmax回归多层神经网络:多层感知机 1.线性回归 例如房价预测,...

  • 我对线性回归算法的理解

    概述 本文旨在简明扼要的阐述我对线性回归算法的理解,线性回归是属于监督学习,根据其特征取值可分为一元线性回归和多元...

  • 大纲

    一、回归算法 1:线性回归 2:逻辑回归 二、神经网络 1:深度学习 三、SVM(支持向量机) 四、聚类算法 五、...

  • 线性回归模型

    参考:1.使用Python进行线性回归2.python机器学习:多元线性回归3.线性回归概念 线性回归模型是线性模...

  • 深度学习中的正则化

    1、参数范数惩罚 正则化在深度学习的出现前就已经被使用了数十年。线性模型,如线性回归和逻辑回归可以使用简单、直接、...

  • 线性回归的实现

    选自 李沐 《动手学深度学习》 第三章。 3.3 线性回归的简洁实现 随着深度学习框架的发展,开发深度学习应用变得...

  • 一. 线性回归,softmax分类,多层感知机

      疫情期间,借助《动手学深度学习》,学习pytorch的代码,顺便记录一些基础知识 1.线性回归--基本要素 1...

  • 线性回归大家族

    目录 1、线性回归大家族谱 2、总结 1、线性回归家族谱 2、总结:本文中,大家学习了多元线性回归,岭回归,Las...

网友评论

      本文标题:PyTrch深度学习简明实战1 - 线性回归

      本文链接:https://www.haomeiwen.com/subject/jpdeldtx.html