python 1.pytorch模型创建 线性回归

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

data = pd.read_csv('C:\\Users\\qjjt\\Desktop\\python\\dataset\\part2\\income1.csv')//记得双杠
data.head()
print(data)//打印
data.info()//查看数据集信息

plt.scatter(data.Education,data.Income)//画分布图
plt.xlabel('Education')
plt.ylabel('Income')

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)
print(data.Education.values.reshape(-1,1))
plt.show()

print(X.shape)


#创建模型,必须从nn.module集成
class EImodle(nn.Module):
     def __init__(self):     #初始化方法
        super(EImodle, self).__init__()  #初始化集成的modle属性。
        # 创建一个linera层,根据输入输出的维度,自动初始化一个w和b,然后加权计算
        #in_features为输入的特征值的长度,此处为1,输出也是
        self.linear = nn.Linear(in_features=1, out_features=1)
     def forward(self, inputs):  #定义方法,如何在计算时应用这些层
        logits = self.linear(inputs) #输入经过linear层得到一个输出
        return logits

model = EImodle() #类实例化

#线性回归的损失函数是均方误差,pytorch有内置,可直接调用
loss_fn = nn.MSELoss()
#优化函数,梯度下降,有内置
opt = torch.optim.SGD(model.parameters(), lr=0.0001) #用随机梯度下降优化模型参数,并且输入学习率


#训练
for epoch in range(5000):
    #同时对x,y进行迭代,保证一一对应
    for x, y in zip(X, Y):
        y_pred = model(x)  #x被modle里的forward调用,最后返回一个logits值赋给y_pred
        loss = loss_fn(y_pred, y)
        opt.zero_grad() #在开始新的循环时清零之前累积的梯度值
        #计算梯度,改变参数
        loss.backward() #损失反向传播
        opt.step()      #优化参数



#查看值
list(model.parameters())  #优化后的参数值
print(list(model.parameters()))
list(model.named_parameters())#这个会告诉当前变量的名字
print(list(model.named_parameters()))
print(model.linear.weight, model.linear.bias)

#绘图验证
plt.scatter(data.Education, data.Income)
plt.xlabel('Education')
plt.ylabel('Income')

plt.plot(X, model(X).detach().numpy(), c='r')
plt.show()

data.Education.values.reshape(-1,1):data.Education.values是一个有30个变量的数组,这里改变其形态,转变为30个一行一列维度为1的输入。左边的-1位自动计算,数组中有几个数据就多少行,右边的1直接定义了列数只为1。这样更符合输入的定义

 加了torch.from_numpy  后,从array转为pytorch的tensor数据类型

 

 

 type(torch.FloatTensor):转化为FloatTensor模式

X.shape:可看见输入为30个长度为1的输入

内置损失函数MSELoss:可看写法举例,然后看要输入什么参数

 

 注意:期间运行时有个报错

 原因是代码写的不规范。这里把forward函数卸载了modle外,等于模型中没有了前向传递这个函数

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值