python-pytorch基础之神经网络回归

这篇具有很好参考价值的文章主要介绍了python-pytorch基础之神经网络回归。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

定义数据集

import torch
import random

定义函数

# 生成数据
def get_rancledata():
    width=random.random()
    height=random.random()
    
    s=width*height
    
    return width,height,s

get_rancledata()
(0.1571327616035657, 0.5335562021159256, 0.08383915950918565)

生成数据集

class dataset(torch.utils.data.Dataset):
    def __init__(self):
        pass
    
    def __len__(self):
        return 1000
    
    def __getitem__(self,i):
        
        width,height,s=get_rancledata()
        x=torch.FloatTensor([width,height])
        
        # 这里注意也是需要转换成tensor的,否则训练会报类型错误
        y=torch.FloatTensor([s])
        
        return x,y
    
dataset=dataset()
len(dataset),dataset[4999]
(1000, (tensor([0.2137, 0.6781]), tensor([0.1449])))

使用Dataloader加载dataset

loader=torch.utils.data.DataLoader(
    dataset=dataset,
    shuffle=True,
    batch_size=9
)
len(loader),next(iter(loader))
(112,
 [tensor([[0.7389, 0.1202],
          [0.5764, 0.7888],
          [0.7244, 0.0229],
          [0.5102, 0.0755],
          [0.8550, 0.4998],
          [0.9992, 0.5890],
          [0.1704, 0.0162],
          [0.2132, 0.9157],
          [0.7946, 0.8907]]),
  tensor([[0.0888],
          [0.4546],
          [0.0166],
          [0.0385],
          [0.4273],
          [0.5885],
          [0.0028],
          [0.1953],
          [0.7077]])])

定义神经网络

定义

# 输入两个,输出一个
class Model(torch.nn.Module):
    def __init__(self):
        super().__init__()
            
        self.fb=torch.nn.Sequential(
            torch.nn.Linear(in_features=2,out_features=32),
            torch.nn.ReLU(),
            torch.nn.Linear(in_features=32,out_features=32),
            torch.nn.ReLU(),
            torch.nn.Linear(in_features=32,out_features=1)
        )
        
    def forward(self,x):
        return self.fb(x)

实例化

model=Model()
torch.rand(4,2)
tensor([[0.4510, 0.1455],
        [0.4963, 0.2974],
        [0.9480, 0.9913],
        [0.9053, 0.4228]])

查看是否是输出的一个

# 测试
model(torch.rand(8,2)).shape
torch.Size([8, 1])

训练

编写trian方法

def train():
    # 选择损失函数
    loss_fn=torch.nn.MSELoss()
    # 选择优化器
    optimizer=torch.optim.Adam(model.parameters(),lr=1e-4)
    
    #遍历多少轮
    for epoch in range(100):
        
        #全量遍历
        for i ,(x,y) in enumerate(loader):
            #计算损失
            #计算梯度
            #优化参数
            #优化梯度清零

            out=model(x)
            loss=loss_fn(out,y)
            loss.backward()
            
            optimizer.step()
            optimizer.zero_grad()
    
            if epoch % 20 ==0:
                print(epoch,loss.item())
    torch.save(model,"huigui.model")

训练并保存模型

train()
0 0.03260539472103119
0 0.06368591636419296
0 0.08260147273540497
0 0.04632813110947609
0 0.08333451300859451
0 0.10992465913295746
0 0.12929300963878632
0 0.061169371008872986
0 0.08229123800992966
0 0.0604255348443985
0 0.11475709825754166
0 0.13913851976394653
0 0.09228374809026718
0 0.10618235915899277
0 0.12170673906803131
0 0.05438697338104248
0 0.11730150133371353
0 0.07718850672245026
0 0.11877405643463135
0 0.0647420659661293
0 0.1062769666314125
0 0.08034960925579071
0 0.06462960690259933
0 0.029708124697208405
0 0.19415663182735443
0 0.022178875282406807
0 0.023824863135814667
0 0.06074700132012367
0 0.014404748566448689
0 0.015829702839255333
0 0.07006165385246277
0 0.0908271074295044
0 0.023783870041370392
0 0.09584006667137146
0 0.16521167755126953
0 0.09473344683647156
0 0.12153694033622742
0 0.030839459970593452
0 0.019292233511805534
40 8.071886259131134e-05
40 2.137169212801382e-05
40 0.00010651862248778343
40 7.332033419515938e-05
40 0.00010564295371295884
40 4.790672755916603e-05
40 3.7615245673805475e-05
40 3.413142985664308e-05
40 6.713613402098417e-05
40 0.0006545005016960204

测试模型结果

构造数据

# 从loader加载一批数据来测试

x,y=next(iter(loader))
x,y

测试

# 方法一
# out=model(x)

# 方法二 加载模型
model1=torch.load("huigui.model")
out=model1(x)

# 打印在一起,便于观察,
# 这个cat函数很有用注意
torch.cat([out,y],dim=1)

结论

从上面结果看

    [ 0.6257,  0.6214],
    
    [ 0.5435,  0.5454],
    
    [ 0.0227,  0.0203],
    
    [-0.0044,  0.0033],
    
    [ 0.5257,  0.5296],
    
    [ 0.4749,  0.4805],
    
    [ 0.4665,  0.4649],
    
    [ 0.4143,  0.4141],
    
    [ 0.0130,  0.0138]]

第一列是预测的,第二列是实际的,可以查看两列值相差很小,说明模型有效文章来源地址https://www.toymoban.com/news/detail-617107.html

到了这里,关于python-pytorch基础之神经网络回归的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《PyTorch深度学习实践》第十一讲 循环神经网络(基础篇 + 高级篇)

    b站刘二大人《PyTorch深度学习实践》课程第十一讲循环神经网络(基础篇 + 高级篇)笔记与代码: https://www.bilibili.com/video/BV1Y7411d7Ys?p=12vd_source=b17f113d28933824d753a0915d5e3a90 https://www.bilibili.com/video/BV1Y7411d7Ys?p=13spm_id_from=pageDrivervd_source=b17f113d28933824d753a0915d5e3a90 markdown笔记:https://gi

    2024年02月13日
    浏览(28)
  • 神经网络中遇到的 python 函数(Pytorch)

    函数用于返回一个对象属性值。 用于判断一个表达式,在表达式条件为 false 的时候触发异常。 语法格式: assert 后面也可以紧跟参数: 等价于: 创建目录。 寻找当前时间。 格式化时间,返回当地时间(显示的格式以字符串显示,主要通过format决定)。 创建日志。 通过

    2024年02月15日
    浏览(26)
  • PyTorch实战:卷积神经网络详解+Python实现卷积神经网络Cifar10彩色图片分类

    目录 前言 一、卷积神经网络概述 二、卷积神经网络特点 卷积运算 单通道,二维卷积运算示例 单通道,二维,带偏置的卷积示例 带填充的单通道,二维卷积运算示例 Valid卷积 Same卷积 多通道卷积计算 1.局部感知域 2.参数共享 3.池化层 4.层次化提取  三、卷积网络组成结构

    2024年02月07日
    浏览(39)
  • 16 PyTorch 神经网络基础【李沐动手学深度学习v2】

    在构造自定义块之前,我们先回顾一下多层感知机的代码。 下面的代码生成一个网络,其中包含一个具有256个单元和ReLU激活函数的全连接隐藏层, 然后是一个具有10个隐藏单元且不带激活函数的全连接输出层。 层和块 构造单层神经网咯:线性层+RELU+线性层 生成2x20(2是批量

    2024年03月10日
    浏览(75)
  • 深度学习基础——通过PyTorch构建神经网络实现1维/2维序列分类

    通过PyTorch构建前馈神经网络,并对二维数据点进行分类。在该例子当中,所有的训练数据和测试数据都是通过高斯混合模型GMM生成的: 更换使用循环神经网络RNN模型,进行1维序列分类任务。 为了简化问题,我们假定: 序列的长度是固定的。我们将其长度设为T=4。 我们只有

    2024年02月11日
    浏览(29)
  • BP神经网络(Python代码实现)基于pytorch

     BP(Back Propagation)神经网络是一种按误差逆传播算法训练的多层前馈网络,它的学习规则是 使用梯度下降法 , 通过反向传播来不断调整网络的权值和阈值 ,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hiddenlayer)和输出层(output layer)。BP网络的学习

    2024年02月11日
    浏览(41)
  • 【Python机器学习】实验14 手写体卷积神经网络(PyTorch实现)

    LeNet-5是卷积神经网络模型的早期代表,它由LeCun在1998年提出。该模型采用顺序结构,主要包括7层(2个卷积层、2个池化层和3个全连接层),卷积层和池化层交替排列。以mnist手写数字分类为例构建一个LeNet-5模型。每个手写数字图片样本的宽与高均为28像素,样本标签值是0~

    2024年02月12日
    浏览(35)
  • python pytorch 纯算法实现前馈神经网络训练(数据集随机生成)-续

    上一次的代码博主看了,有两个小问题其实,一个是,SGD优化的时候,那个梯度应该初始化为0,还一个是我并没有用到随机生成batch。 博主修改了代码,并且加入了accuracy图像绘制的代码。代码如下: 可一下跑出的结果: 可以看到这样看下来,效果就很不错了。

    2024年02月13日
    浏览(26)
  • Python基于PyTorch实现循环神经网络分类模型(LSTM分类算法)项目实战

    说明:这是一个机器学习实战项目(附带 数据+代码+文档+视频讲解 ),如需 数据+代码+文档+视频讲解 可以直接到文章最后获取。 LSTM网络是目前更加通用的循环神经网络结构,全称为Long Short-Term Memory,翻译成中文叫作“长‘短记忆’”网络。读的时候,“长”后面要稍

    2024年02月16日
    浏览(32)
  • Python基于PyTorch实现卷积神经网络分类模型(CNN分类算法)项目实战

    说明:这是一个机器学习实战项目(附带 数据+代码+文档+视频讲解 ),如需 数据+代码+文档+视频讲解 可以直接到文章最后获取。 卷积神经网络,简称为卷积网络,与普通神经网络的区别是它的卷积层内的神经元只覆盖输入特征局部范围的单元,具有稀疏连接(sparse connec

    2024年02月15日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包