首页 > 其他分享 >【第1周】深度学习基础

【第1周】深度学习基础

时间:2023-07-14 11:47:44浏览次数:39  
标签:函数 梯度 模型 torch 基础 学习 神经网络 深度 AlexNet

一、代码练习

1. pytorch基础练习

1.1 数据定义

一般定义数据使用torch.Tensor

Tensor支持各种各样类型的数据,包括:torch.float32, torch.float64, torch.float16, torch.uint8, torch.int8, torch.int16, torch.int32, torch.int64等

创建Tensor有多种方法,有:ones, zeros, eye, arange, linspace, rand, randn, normal, uniform, randperm

1.2 定义操作

基本运算包括:abs/sqrt/div/exp/fmod/pow ,及一些三角函数 cos/ sin/ asin/ atan2/ cosh,及 ceil/round/floor/trunc 等
布尔运算包括: gt/lt/ge/le/eq/ne,topk, sort, max/min
线性计算包括:trace, diag, mm/bmm,t,dot/cross,inverse,svd 等

其中数积运算@要求操作数类型为float

使用cat函数对张量在X方向或Y方向进行拼接

2. 螺旋数据分类

引入基本的库,初始化重要参数

初始化 X 和 Y。 X 可以理解为特征矩阵,Y可以理解为样本标签。 结合代码可以看到,X的为一个 NxC 行, D 列的矩阵。C 类样本,每类样本是 N个,所以是 N*C 行。每个样本的特征维度是2,所以是 2列。

2.1 线性模型分类


使用 print(model) 把模型输出,可以看到有两层:

  • 第一层输入为2(每个样本的特征维度为2),输出为100(神经网络隐层单元数量为100);
  • 第二层输入为100(上一层的输出),输出为3(类别数)

可以看出准确率很低,对于这样一个复杂的数据分布,线性模型难以实现准确分类,考虑使用两层神经网络。

2.2 两层神经网络分类

在两个线性层之间添加一个激活函数ReLU,来实现非线性变换。

可以看出,两层神经网络分类准确率高了很多

二、问题总结

1、AlexNet有哪些特点?为什么可以比LeNet取得更好的性能?
AlexNet特点:使用ReLU方法加快训练速度,使用Dropout防止过拟合,使用多GPU训练缩短训练时间。
性能优于LeNet的原因:

  • AlexNet采用ReLU激活函数,相较于LeNet采用的Sigmoid,ReLU的计算成本更低,同时也可以避免在饱和区域产生梯度消失而减慢收敛速度的问题。
  • 使用多GPU缩短了训练时间。
  • AlexNet在全链接层采用Dropout技术,提高了模型的泛化能力。
  • AlexNet使用最大池化层,避免平均池化的模糊化效果提升了特征的丰富性。

2、激活函数有哪些作用?

  • 没有激活函数的限制,数据逐层积累,类似爆炸一样,需要使用激活函数每次把结果限制在一定范围内;
  • 激活函数起到类似神经元的作用,负责信号的控制,来决定该神经元是否激活,从而使得模型学习效果更好。

3、梯度消失现象是什么?
深层网络中,激活函数的导数太小,根据链式求导法则,靠近输入层的参数的梯度因为乘了很多过小的数而趋近于0,导致模型无法更新。

4、神经网络是更宽好还是更深好?

  • 更深的网络,有更好的非线性表达能力,可以拟合更加复杂的特征。但是网络加深会带来梯度不稳定、网络退化的问题,过深的网络会使浅层学习能力下降。
  • 更宽的网络可以保证每一层都学到丰富的特征。但是太宽的网络会提取过多重复的特征,加大模型计算负担。
    选择更深还是更宽的神经网络要视具体情况而定。

5、为什么要使用Softmax?
Softmax训练的深度特征会把整个超空间或者超球按照分类个数进行划分,保证类别是可分的,这一点对多分类任务如MNIST和ImageNet非常合适。

6、SGD 和 Adam 哪个更有效?
SGD基本思想为通过梯度下降的方法,不断调整模型的参数使模型的损失函数最小化。


SGD的优点为实现起来较为简单、效率高,缺点为收敛速度慢、容易陷入局部最小值。

Adam基本思想为通过维护模型的梯度和梯度平方的一阶动量和二阶动量,来调整模型的参数。

Adam的优点为计算效率高,收敛速度快,缺点是需要调整超参数。

标签:函数,梯度,模型,torch,基础,学习,神经网络,深度,AlexNet
From: https://www.cnblogs.com/happyHour/p/17553265.html

相关文章

  • docker基础知识
    前言我正在参加「掘金·启航计划」。Docker是一个开源的容器化平台,它提供了一种轻量级且可移植的方法来打包、分发和运行应用程序。通过使用Docker,开发人员可以将应用程序及其依赖项打包到称为容器的独立单元中,以便在不同的环境中运行,而无需担心环境差异和依赖项冲突。可以说doc......
  • 从零玩转系列之SpringBoot3-基础特性
    一、简介1.前置知识​ ●Java17​ ●Spring、SpringMVC、MyBatis​ ●Maven、IDEA2.环境要求环境&工具版本(orlater)SpringBoot3.1.xIDEA2023.xJava17+Maven3.5+Tomcat10.0+Servlet5.0+GraalVMCommunity22.3+NativeBuildTools0......
  • java学习day03:循环结构
    我在B站上大学......
  • 使用Debian 11基础镜像制作java8镜像
    下面是dockerfile内容:FROMdebian:bullseye#切换apt源为清华源,并安装vimpingtelnet命令RUNapt-getupdate&&aptinstall-yapt-transport-httpsca-certificates&&\cp/etc/apt/sources.list/etc/apt/sources.list.bak&&\echo"debhttps:......
  • Ubuntu部署django的基础软件安装
    ubuntudjango sudovidjango.sh#インストールのコマンドです。sudoaptinstallgitsudoapt-getinstallapache2apache2-devgdal-binlibgdal-devsudoaptinstalllibapache2-mod-wsgi-py3sudopip3install-yuwsgisudoapt-getinstall-yapache2sudo......
  • Miller_rabin 素数测试 学习笔记
    Miller_rabin素数测试一种用来判断素数的算法。前置芝士威尔逊定理若\(p\)为素数,\((p-1)!\equiv-1(\modp)\)。证明:充分性证明:如果\(p\)不是素数,那么他的因数必定存在于$1,2,3,\dots,p−1$之中,所以\(\gcd((p-1)!,p)\),那么\((p-1)!\not\equiv-1\)。必要性证......
  • 【HarmonyOS】ArkTS学习之基于TextTimer的简易计时器
    ​【关键字】ArkTS、计时器、TextTimer 【介绍】TextTimer是ArkTS提供的通过文本显示计时信息并控制其计时器状态的组件。今天就给大家展示一个基于TextTimer的简易计时器的实现吧。在使用之前我们要先了解它的用法:TextTimer(options?:{isCountDown?:boolean,count?:n......
  • 优化基础1——单纯形法与迭代局部搜索
    一.单纯形法学习的参考资料:运筹学教学|十分钟快速掌握单纯形法(附C++代码及算例)(qq.com)运筹说第16期|线性规划硬核知识点梳理—单纯形法-知乎(zhihu.com)史上最详细单纯形法—从理解到计算(带约束规划问题)-知乎(zhihu.com)主要理解其思想应该是对暴力求解法的改进......
  • 网络流学习笔记
    网络流何为网络流    想要弄清楚网络流,首先要知道网络的概念,通常在运筹学中,网络是指一个有向图$G\=\(V,E)$。其每条边$(u,v)\inE$都有一个权值$c(u,v)$,称为这条边的流量(Capacity),还有两个特殊的点,一个是源点(Source),一个是汇点(Sink)在图论中,网络流(英语:Networkfl......
  • 001 学习笔记--Access 常用操作
    Access数据库——设计试图,可进行表字段设计Access数据库——双击表,可维护数据常用CRUD帮助方法如下所示:usingSystem.Data;usingSystem.Data.OleDb;namespaceDBHelper{publicstaticclassAccessHelper{//privatestaticstringconnString=Confi......