pytorch-线性回归

1、导入表格数据

filename = "./data.csv"
data = pd.read_csv(filename)
features = data.iloc[:,1:]
labels = data.iloc[:,0]

2、转成Tensor形式

'''
DataFrame ----> Tensor
'''
features = torch.tensor(features.values, dtype=torch.float32)

labels = torch.tensor(labels.values, dtype=torch.float32)
labels = torch.reshape(labels,(-1,1))

3、生成迭代器,分批次读取数据

from torch.utils import data
def load_array(data_arrays , batch_size , is_train = True):
    dataset = data.TensorDataset(*data_arrays)
    return data.DataLoader(dataset , batch_size , shuffle = is_train)

batch_size = 10
data_iter = load_array((features,labels),batch_size)

next(iter(data_iter))

4、定义神经网络

class LinearRegression(nn.Module):
    def __init__(self):
        super(LinearRegression, self).__init__()
        self.layer1 = nn.Linear(2, 1)

    def forward(self, x):
        return self.layer1(x)

5、训练网络

model = LinearRegression()
gpu = torch.device('cuda')
mse_loss = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.003)
Loss = []
epochs = 1000
def train():
    for i in range(epochs):
        for X , y in data_iter:
            y_hat = model(X)  # 计算模型输出结果
            loss = mse_loss(y_hat, y)  # 损失函数
            loss_numpy = loss.detach().numpy()
            Loss.append(loss_numpy)
            optimizer.zero_grad()  # 梯度清零
            loss.backward()  # 计算权值
            optimizer.step()  # 修改权值
        print(i, loss.item(), sep='\t')
train()  # 训练
for parameter in model.parameters():
    print(parameter)
plt.plot(Loss)

6 整体代码

import matplotlib.pyplot as plt
import pandas as pd
import torch
from torch import nn, optim
from torch.utils import data


class LinearRegression (nn.Module):
    def __init__(self, feature_nums):
        super (LinearRegression, self).__init__ ()
        self.layer1 = nn.Linear (feature_nums, 1)

    def forward(self, x):
        return self.layer1 (x)


def load_array(data_arrays, batch_size, is_train=True):
    dataset = data.TensorDataset (*data_arrays)
    return data.DataLoader (dataset, batch_size, shuffle=is_train)


def Linear_Regression_pytorch(filepath, feature_nums, batch_size, learning_rate, epochs):
    filename = filepath
    data = pd.read_csv (filename)

    features = data.iloc[:, 1:]
    labels = data.iloc[:, 0]

    features = torch.tensor (features.values)
    features = torch.tensor (features, dtype=torch.float32)
    labels = torch.tensor (labels.values)
    labels = torch.tensor (labels, dtype=torch.float32)
    labels = torch.reshape (labels, (-1, 1))

    batch_size = batch_size
    data_iter = load_array ((features, labels), batch_size)
    next (iter (data_iter))

    model = LinearRegression (feature_nums)
    gpu = torch.device ('cuda')
    mse_loss = nn.MSELoss ()
    optimizer = optim.Adam (model.parameters (), lr=learning_rate)
    Loss = []

    epochs = epochs

    for i in range (epochs):
        for X, y in data_iter:
            y_hat = model (X)  # 计算模型输出结果
            loss = mse_loss (y_hat, y)  # 损失函数
            loss_numpy = loss.detach ().numpy ()

            optimizer.zero_grad ()  # 梯度清零
            loss.backward ()  # 计算权值
            optimizer.step ()  # 修改权值
        print (i, loss.item (), sep='\t')

        Loss.append (loss.item ())
    for parameter in model.parameters ():
        print (parameter)

    plt.plot (Loss)
    plt.title("Loss")
    plt.show ()


if __name__ == "__main__":
    Linear_Regression_pytorch (filepath="data.csv",
                               feature_nums=2,
                               batch_size=10,
                               learning_rate=0.05,
                               epochs=1000
                               )

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值