pytorch实战第一章

主要参考龙曲良老师的视频课程和书籍<<Pytorch深度学习实战>>

第一章人工智能绪论

1.1人工智能

1.1.1人工智能

发展:

  1. 达特茅斯会议
  2. 知识库加推理(专家系统)
  3. 机器学习
  4. 深度学习
    请添加图片描述

1.1.2机器学习

在这里插入图片描述

  1. 监督学习:线性回归,逻辑回归,支持向量机,随机森林
  2. 无监督学习:自编码器,生成对抗网络
  3. 强化学习(增强学习):DQN,TRPO,PPO

1.1.3神经网络与深度学习

在这里插入图片描述

1.2神经网络发展简史

  1. 两个阶段:浅层神经网络阶段,深度学习
  2. 2006以前一神经网络和连接主义的名义发展(2次兴盛2次寒冬),2006年,Geoffrey Hinton首次将深层神经网络命名为深度学习(第三次复兴)

1.2.1浅层神经网络

  1. MP神经元模型:MP 神经元模型并没有学习能力,只能完成固定逻辑的判定。(1943)
    在这里插入图片描述
  2. 感知机(Perceptron)(1958)
    在这里插入图片描述
    - 第一个可以自动学习权重的神经元模型
    - 无法处理简单的异或 XOR 等线性不可分问题
  3. 第一次兴盛:1943~1969
  4. 第一次低估:1969~1982(感知机一书的发表)
  5. 第二次兴盛:1982~1995(BP再次被重视并被应用,1982循环连接的Hopfield网络)
    - CNN被提出
    - RNN被提出
    - BP
    - 多次感知机
    - Yann LeCun将BP应用在手写数字图片上
    - 1997,LSTM(RNN)
    - 双向循环网络
  6. 第二次寒冬:SVM
  7. 人工智能第三次复兴:Geoffrey Hinton 等人发现通过逐层预训练的方式可以较好地训练多层神经网络,并在 MNIST 手写数字图片数据集上取得了优于 SVM 的错误率
    请添加图片描述

1.2.1深度学习实战

  1. Geoffrey Hinton通过浅层预训练在MNIST上优于SVM
  2. 2011提出ReLU函数
  3. 2012年AlexNet使用ReLU,Dropout在ILSVRC-2012比赛优异,基于两块 GTX580 GPU 训练
  4. VGG系列
  5. GooLeNet系列
  6. ResNet系列:层数提升值数百层
  7. DensNet系列
  8. 2014 年,Ian Goodfellow 提出了生成对抗网络,通过对抗训练的方式学习样本的真实分布,从而生成逼近度较高的样本。
    在这里插入图片描述

1.3深度学习特点

1.3.1数据量

  1. 鸢尾花卉数据集 Iris 共包含 3 个类别花卉,每个类别 50 个样本
  2. Yann LeCun 收集整理的 MNIST 手写数字图片数据集共包含 0~9 共 10类数字,每个类别多达 7000 张图片

1.3.2计算力

  1. 目前的大部分神经网络均使用 NVIDIA GPU 和 Google TPU 等并行加速芯片训练模型参数

1.3.3网络规模

  1. AlexNet(8 层)、VGG16(16 层)、 GoogLeNet(22 层)、ResNet50(50 层)、DenseNet121(121 层)
  2. 同时输入图片的大小也从28 × 28逐渐增大,变成224 × 224、416 × 416等

1.5 深度学习框架

1.5.1主流框架

  1. Caffe贾扬清,主要面向使用卷积神经网络.主要开发语言是C++.Caffe2已经融入到PyTorch中
  2. MXNET有李沐
  3. Keras基于Theano和TensorFlow.简单
  4. TensorFlow有Google开发
  5. PyTorch有Facebook开发

1.5.2静态图和动态图

  1. 基于静态图的代表性框架是TensorFlow 1,特点是建立计算图过程和实际计算过程是分开的.
  2. 基于动态图的代表性框架是PyTorch,特点是计算图的建图过程和计算过程是同时进行的.
  3. 符号式编程:先创建计算图后运行的编程方式,与之相对的就是命令式编程也称为动态图模式.
  4. 一般认为,动态图模式开发效率高,但是运行效率可能不如静态图模式,更适合算法设计和开发;静态图模式运行效率高,更适合算法部署
  5. ONNX 生态:https://zhuanlan.zhihu.com/p/305746549?utm_id=0

1.5.3功能演示

1)加速计算
import timeit
import torch


def compare_cpu_gpu(n):
    # 创建在CPu上运算的2个矩阵
    cpu_a = torch.randn([1, n])
    cpu_b = torch.randn([n, 1])

    # 创建使用GPU运算的2个矩阵
    gpu_a = torch.randn([1, n]).cuda()
    gpu_b = torch.randn([n, 1]).cuda()

    def cpu_run():
        return torch.matmul(cpu_a, cpu_b)

    def gpu_run():
        return torch.matmul(gpu_a, gpu_b)

    # 第一次计算需要热身,避免将初始化阶段时间计算在内
    cpu_time = timeit.timeit(cpu_run, number=3)
    gpu_time = timeit.timeit(gpu_run, number=3)

    # 正式计算10 次,取平均时间
    cpu_time = timeit.timeit(cpu_run, number=100)
    gpu_time = timeit.timeit(gpu_run, number=100)

    return cpu_time, gpu_time


cpu_times = []
gpu_times = []
x = []
for n in range(100):
    cpu, gpu = compare_cpu_gpu(n)
    x.append(n)
    cpu_times.append(cpu)
    gpu_times.append(gpu)
print(len(x))
print(len(cpu_times))
print(len(gpu_times))

import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

plt.figure(figsize=(5, 3), dpi=100)   # 创建画布
plt.plot(x,cpu_times,gpu_times)   # 绘制折线图
plt.show()   # 显示图像
2) 自动求梯度
import torch
from torch import autograd

a = torch.tensor(1.)
b = torch.tensor(2.)
c = torch.tensor(3.)
w = torch.tensor(4.,requires_grad=True)

y = a*w**2+b*w+c

w_grad = autograd.grad(y,[w])
print('w_grad: ',w_grad) # w_grad:  (tensor(10.),)
torch.Tensor与torch.tensor的区别

区别一:torch.Tensor是torch.empty与torch.tensor的混合,在传入数据时,torch.Tensor使用全局默认类型(FloatTensor)而torch.tensor则会从输入数据中进行推断

区别二:当输入数据是一个常数n时,torch.Tensor会将n是为一维张量的元素个数,并随机初始化。而torch.tensor则会将n视作一个数字而不是元素个数。例如:

torch.Tensor(6)
t# ensor([2.7626e-06, 1.0871e-05, 3.4008e-06, 5.2903e-08, 2.1877e-04, 1.7377e-04])

torch.tensor(6)
# tensor(6)

区别三:torch.Tensor是一个,会调用自己的构造函数,而torch.tensor则是一个函数,其原型为:

torch.tensor(data, dtype=None, device=None, requires_grad=False)

来自于:https://blog.csdn.net/qq_45957458/article/details/129656914

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值