用pytorch1.0搭建简单的神经网络:进行多分类分析

  1. import torch
  2. import torch.nn.functional as F # 包含激励函数
  3. import matplotlib.pyplot as plt
  4.  
  5. # 假数据
  6. # make fake data
  7. n_data = torch.ones(100, 2)
  8. x0 = torch.normal(2*n_data, 1) # class0 x data (tensor), shape=(100, 2)
  9. y0 = torch.zeros(100) # class0 y data (tensor), shape=(100, 1)
  10. x1 = torch.normal(-2*n_data, 1) # class1 x data (tensor), shape=(100, 2)
  11. y1 = torch.ones(100) # class1 y data (tensor), shape=(100, 1)
  12. # 注意 x, y 数据的数据形式是一定要像下面一样 (torch.cat 是合并数据)
  13. x = torch.cat((x0, x1), 0).type(torch.FloatTensor) # shape (200, 2) FloatTensor = 32-bit floating
  14. y = torch.cat((y0, y1), ).type(torch.LongTensor) # shape (200,) LongTensor = 64-bit integer
  15.  
  16. # The code below is deprecated in Pytorch 0.4. Now, autograd directly supports tensors
  17. # x, y = Variable(x), Variable(y)
  18. # 画散点图
  19. plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=y.data.numpy(), s=100, lw=0, cmap='RdYlGn')
  20. plt.show()
  21.  
  22. # 建立神经网络
  23. # 先定义所有的层属性(__init__()), 然后再一层层搭建(forward(x))层于层的关系链接
  24. class Net(torch.nn.Module):
  25. def __init__(self, n_feature, n_hidden, n_output):
  26. super(Net, self).__init__() # 继承 __init__ 功能
  27. # 定义每层用什么样的形式
  28. self.hidden = torch.nn.Linear(n_feature, n_hidden) # hidden layer
  29. self.out = torch.nn.Linear(n_hidden, n_output) # output layer
  30.  
  31. def forward(self, x): # 这同时也是 Module 中的 forward 功能
  32. # 正向传播输入值, 神经网络分析出输出值
  33. x = F.relu(self.hidden(x)) # activation function for hidden layer
  34. x = self.out(x)
  35. return x
  36.  
  37. net = Net(n_feature=2, n_hidden=10, n_output=2) # define the network
  38. print(net) # net architecture == 显示神经网络结构
  39. # Net(
  40. # (hidden): Linear(in_features=2, out_features=10, bias=True)
  41. # (out): Linear(in_features=10, out_features=2, bias=True)
  42. # )
  43. # 搭建完神经网络后,对 神经网路参数(net.parameters()) 进行优化
  44. # (1.选择优化器 optimizer 是训练的工具
  45. optimizer = torch.optim.SGD(net.parameters(), lr=0.02) # 传入 net 的所有参数, 学习率
  46. # (2.选择优化的目标函数
  47. loss_func = torch.nn.CrossEntropyLoss() # the target label is NOT an one-hotted
  48.  
  49. plt.ion() # something about plotting
  50. # (3.开始训练网络
  51. for t in range(100):
  52. out = net(x) # input x and predict based on x # 喂给 net 训练数据 x, 输出预测值
  53. loss = loss_func(out, y) # must be (1. nn output, 2. target), the target label is NOT one-hotted # 计算两者的误差
  54.  
  55. optimizer.zero_grad() # clear gradients for next train # 清空上一步的残余更新参数值
  56. loss.backward() # backpropagation, compute gradients # 误差反向传播, 计算参数更新值
  57. optimizer.step() # apply gradients # 将参数更新值施加到 net 的 parameters 上
  58.  
  59. if t % 2 == 0:
  60. # plot and show learning process
  61. plt.cla()
  62. # 过了一道 softmax 的激励函数后的最大概率才是预测值
  63. prediction = torch.max(out, 1)[1]
  64. pred_y = prediction.data.numpy()
  65. target_y = y.data.numpy()
  66. plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=pred_y, s=100, lw=0, cmap='RdYlGn')
  67. accuracy = float((pred_y == target_y).astype(int).sum()) / float(target_y.size) # 预测中有多少和真实值一样
  68. plt.text(1.5, -4, 'Accuracy=%.2f' % accuracy, fontdict={'size': 20, 'color': 'red'})
  69. plt.pause(0.1)
  70.  
  71. plt.ioff()
  72. plt.show()

用pytorch1.0搭建简单的神经网络:进行多分类分析的更多相关文章

  1. 用pytorch1.0搭建简单的神经网络:进行回归分析

    搭建简单的神经网络:进行回归分析 import torch import torch.nn.functional as F # 包含激励函数 import matplotlib.pyplot as p ...

  2. 用pytorch1.0快速搭建简单的神经网络

    用pytorch1.0搭建简单的神经网络 import torch import torch.nn.functional as F # 包含激励函数 # 建立神经网络 # 先定义所有的层属性(__in ...

  3. 神经网络一(用tensorflow搭建简单的神经网络并可视化)

    import tensorflow as tf import numpy as np import matplotlib.pyplot as plt #创建一个input数据,-1到1之间300个数, ...

  4. python日记:用pytorch搭建一个简单的神经网络

    最近在学习pytorch框架,给大家分享一个最最最最基本的用pytorch搭建神经网络并且训练的方法.本人是第一次写这种分享文章,希望对初学pytorch的朋友有所帮助! 一.任务 首先说下我们要搭建 ...

  5. Python实现一个简单三层神经网络的搭建并测试

    python实现一个简单三层神经网络的搭建(有代码) 废话不多说了,直接步入正题,一个完整的神经网络一般由三层构成:输入层,隐藏层(可以有多层)和输出层.本文所构建的神经网络隐藏层只有一层.一个神经网 ...

  6. pytorch1.0批训练神经网络

    pytorch1.0批训练神经网络 import torch import torch.utils.data as Data # Torch 中提供了一种帮助整理数据结构的工具, 叫做 DataLoa ...

  7. pytorch1.0神经网络保存、提取、加载

    pytorch1.0网络保存.提取.加载 import torch import torch.nn.functional as F # 包含激励函数 import matplotlib.pyplot ...

  8. 使用pytorch快速搭建神经网络实现二分类任务(包含示例)

    使用pytorch快速搭建神经网络实现二分类任务(包含示例) Introduce 上一篇学习笔记介绍了不使用pytorch包装好的神经网络框架实现logistic回归模型,并且根据autograd实现 ...

  9. 从环境搭建到回归神经网络案例,带你掌握Keras

    摘要:Keras作为神经网络的高级包,能够快速搭建神经网络,它的兼容性非常广,兼容了TensorFlow和Theano. 本文分享自华为云社区<[Python人工智能] 十六.Keras环境搭建 ...

随机推荐

  1. x32下逆向 PsSetCreateProcessNotifyRoutine 进程钩子

    目录 一丶前言 二丶逆向过程 1.windbg挂载 win7 32位.定位到函数反汇编位置 2.逆向 PspSetCreateProcessNotifyRoutine 3.逆向 ExReference ...

  2. Consul常用接口使用

    prometheus.yml 配置 - job_name: 'node_exporter' consul_sd_configs: - server: 'consul_ip:8500' services ...

  3. 【2019.10.17】十天Web前端程序员体验(软件工程实践第五次作业)

    结对信息.具体分工 Github地址:https://github.com/MokouTyan/131700101-031702425 学号 昵称 主要负责内容 博客地址 131700101 莫多 代 ...

  4. Android中Popupwindow和Dialog的区别

    Android中的对话框有两种:PopupWindow和AlertDialog.它们都可以实现弹窗功能,但是他们之间有一些差别,下面总结了一点. (1)Popupwindow在显示之前一定要设置宽高, ...

  5. PostgreSQL学习笔记(九) 用户、角色、权限管理

    PostgreSQL是一个多用户数据库,可以为不同用户指定允许的权限. 角色PostgreSQL使用角色的概念管理数据库访问权限. 根据角色自身的设置不同,一个角色可以看做是一个数据库用户,或者一组数 ...

  6. 今天闲来无事给我这老伙计A4L换个机油

    今天闲来无事给我这老伙计A4L换个机油         今天天气不错正好心血来潮给我的老伙计做个小保健.跟我这么久了也不能亏待是吧,也很久没来论坛了顺便冒个泡给我们版主晶晶交个作业要不然又要揍我了. ...

  7. JVM 自定义类加载器

    一.创建自定义类加载器 package com.example.jvm.classloader; import java.io.ByteArrayOutputStream; import java.i ...

  8. SiamRPN: High Performance Visual Tracking with Siamese Region Proposal Network

    High Performance Visual Tracking with Siamese Region Proposal Network 2018-11-26 18:32:02 Paper:http ...

  9. 回声消除(AEC)原理

    一.前言 因为工作的关系,笔者从2004年开始接触回声消除(Echo Cancellation)技术,而后一直在某大型通讯企业从事与回声消除技术相关的工作,对回声消除这个看似神秘.高端和难以理解的技术 ...

  10. java和c# md5加密

    MD5加密的方式有很多,加盐的方式更多,最近项目需要java和c#加密结果一致,形成方法如下: 1.c#加密方法/// <summary> /// MD5 加密字符串 /// </s ...