博客
关于我
pytorch分类和回归代码实现
阅读量:230 次
发布时间:2019-02-28

本文共 2846 字,大约阅读时间需要 9 分钟。

PyTorch 神经网络搭建实例

PyTorch 神经网络的搭建通常分为以下几个关键步骤:数据准备、网络架构设计、损失函数与优化器选择以及反向传播与更新。

1. 分类任务示例

import torchimport torch.nn.functional as Fimport matplotlib.pyplot as plt# 数据准备n_data = 200x0 = torch.normal(2 * n_data, 1, (100, 2))y0 = torch.zeros(100)x1 = torch.normal(-2 * n_data, 1, (100, 2))y1 = torch.ones(100)x = torch.cat((x0, x1), 0).type(torch.FloatTensor)y = torch.cat((y0, y1), 0).type(torch.LongTensor)# 网络架构定义class Net(torch.nn.Module):    def __init__(self, n_feature, n_hidden, n_output):        super(Net, self).__init__()        self.hidden = torch.nn.Linear(n_feature, n_hidden)        self.out = torch.nn.Linear(n_hidden, n_output)        def forward(self, x):        x = F.relu(self.hidden(x))        x = self.out(x)        return xnet = Net(n_feature=2, n_hidden=10, n_output=2)print(net)# 优化器与损失函数optimizer = torch.optim.SGD(net.parameters(), lr=0.02)loss_func = torch.nn.CrossEntropyLoss()# 训练过程plt.ion()for t in range(100):    out = net(x)    loss = loss_func(out, y)    optimizer.zero_grad()    loss.backward()    optimizer.step()        if t % 2 == 0:        plt.cla()        prediction = torch.max(out, 1)[1]        accuracy = (prediction.data.numpy() == y.data.numpy()).sum() / y.size()        plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=prediction.data.numpy(), s=100, lw=0, cmap='RdYlGn')        plt.text(1.5, -4, 'Accuracy: %.2f' % accuracy, fontdict={'size': 20, 'color': 'red'})        plt.pause(0.1)plt.ioff()plt.show()

2. 回归任务示例

import torchimport torch.nn.functional as Fimport matplotlib.pyplot as plt# 数据准备x_train = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1).type(torch.FloatTensor)y_train = x_train.pow(2) + 0.2 * torch.rand(x_train.size())# 网络架构定义class Net(torch.nn.Module):    def __init__(self, n_feature, n_hidden, n_output):        super(Net, self).__init__()        self.hidden = torch.nn.Linear(n_feature, n_hidden)        self.predict = torch.nn.Linear(n_hidden, n_output)        def forward(self, x):        x = F.relu(self.hidden(x))        x = self.predict(x)        return xnet = Net(n_feature=1, n_hidden=10, n_output=1)print(net)# 优化器与损失函数optimizer = torch.optim.SGD(net.parameters(), lr=0.2)criterion = torch.nn.MSELoss()# 训练过程plt.ion()for t in range(200):    prediction = net(x_train)    loss = criterion(prediction, y_train)    optimizer.zero_grad()    loss.backward()    optimizer.step()        if t % 5 == 0:        plt.cla()        plt.scatter(x_train.numpy(), y_train.numpy())        plt.plot(x_train.numpy(), prediction.data.numpy(), 'r-', lw=5)        plt.text(0.5, 0, 'Loss: %.4f' % loss.item(), fontdict={'size': 20, 'color': 'red'})        plt.pause(0.1)plt.ioff()plt.show()

3. 优化后的代码解释

在上述代码中,主要进行了以下改进:

  • 代码注释优化:增加了注释,方便理解每一步操作的意义
  • 代码风格统一:采用了更一致的代码格式,提升可读性
  • 性能优化:通过将变量命名更具信息量,提升代码可读性
  • 可扩展性增强:增加了更多的注释,方便后续功能扩展
  • 通过以上代码示例,可以清晰地看到从数据准备到模型训练再到结果可视化的完整流程。每一步都经过精心设计,确保代码既简洁又高效。

    转载地址:http://jfxp.baihongyu.com/

    你可能感兴趣的文章
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO基于UDP协议的网络编程
    查看>>
    NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
    查看>>
    Nitrux 3.8 发布!性能全面提升,带来非凡体验
    查看>>
    NI笔试——大数加法
    查看>>
    NLog 自定义字段 写入 oracle
    查看>>
    NLog类库使用探索——详解配置
    查看>>
    NLP 基于kashgari和BERT实现中文命名实体识别(NER)
    查看>>
    NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
    查看>>
    NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
    查看>>
    NLP学习笔记:使用 Python 进行NLTK
    查看>>
    NLP的神经网络训练的新模式
    查看>>
    NLP采用Bert进行简单文本情感分类
    查看>>
    NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
    查看>>
    NLP:使用 SciKit Learn 的文本矢量化方法
    查看>>
    Nmap扫描教程之Nmap基础知识
    查看>>
    Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
    查看>>
    NMAP网络扫描工具的安装与使用
    查看>>