参考

《神经网络与深度学习》

课时14 张量数据类型-1_哔哩哔哩_bilibili

深度神经网络(DNN) - _yanghh - 博客园

目录

1: 常见网络结构

2: 前馈神经网络

3: 反向传播算法

4: Softmax 分类例子

## Versions:
- [Version 1.0](https://docs.google.com/presentation/d/11mR1nkIR9fbHegFkcFq8z9oDQ5sjv8E3JJp1LfLGKuk/edit?usp=sharing)


一  常见网络结构

1.1 前馈网络

定义:

每一层中的神经元接收前一层神经元的输出,并输出到下一层神经元。

主要包括:

全连接前馈网络 和 卷积神经网络

1.2 记忆网络

称为反馈网络,网络中的神经元不但可以接收其它神经元的信息,也可以接收自己的历史信息。 增加了记忆功能

主要包括:

RNN,LSTM,Hopfield,玻尔兹曼机,受限玻尔兹曼机

1.3 图网络

前面输入都可以表示向量或者向量序列,实际应用中很多数据是图结构数据,比如

知识谱,社交网络,分子网络。

主要包括:

图卷网络  Graph Conolutional Network

图注意网络: Graph Attention Network GAT

消息传递网络   Message Passing Neural Netwrok


二  前馈神经网络

     2.1 前馈神经网络记号

:      神经网络层数

 :第l层神经网络的个数

 :第L层神经元的激活函数

:       l-1层到l层的权重系数矩阵

:        l-1层到l层的偏置

:        l  层神经元的输入

:         l层神经元的输出

   2.2 参数学习

这边以分类问题为例,其损失函数为

给定训练集,将每个样本输入给前馈神经网络,得到网络的输出为, 结构化风险函数为

F: Frobenius 范数

在梯度下降法的每次迭代中,第l层的参数 参数更新方式为

 在神经网络的训练过程中经常使用反向传播算法来高效计算梯度


四  张量数据类型

pytorch 没有string 类型,对于单个字母用one-hot向量表示

如果是字符串,用word2vec 或者 glove 来实现

# -*- coding: utf-8 -*-
"""
Created on Mon Sep  5 21:50:02 2022@author: cxf
"""import torchdef Debug():data = torch.randn(2,3)print("\n 数据类型: ",data.type(),"\t 维度 ",data.dim())data_gpu = data.cuda()hardware = isinstance(data_gpu, torch.cuda.FloatTensor)print("是否为GPU类型:",hardware)a = torch.tensor(1.0) #标量print("\n 标量: ",a.type(),a.shape,len(a.shape),a.size(),"\t 维度 ",a.dim()) #标量维度if __name__ == "__main__":Debug()

二 反向传播算法

以DNN为例:

输入:

        训练集

        验证集V, 学习率

repeat

         训练集随机排序

         for  n =1  ... N   do

                 选取样本      

         前向传播:

                (神经元输入)

                (激活函数)

反向传播计算每一层的误差

层:

   更新每一层的导数

 更新每一层的参数

         

         

损失函数


import torch
import torch.utils.data as Data
import numpy as np'''
shuffle:(数据类型 bool)洗牌。默认设置为False。在每次迭代训练时是否将数据洗牌,默认设置是False。将输入数据的顺序打乱,是为了使数据更有独立性
num_workers:(数据类型 Int)工作者数量,默认是0。使用多少个子进程来导入数据。设置为0,就是使用主进程来导入数据。注意:这个数字必须是大于等于0的,负数估计会出错。
drop_last:(数据类型 bool)丢弃最后数据,默认为False。设置了 batch_size 的数目后,最后一批数据未必是设置的数目,有可能会小些。这时你是否需要丢弃这批数据。
'''
def load(x,y,batch):BATCH_SIZE = batch #批训练数据量的大小trainset = Data.TensorDataset(x, y) #训练数据集#创建一个dataloader类的实例loader = Data.DataLoader(dataset=trainset,batch_size=BATCH_SIZE,shuffle=True,num_workers=2,drop_last = True)return loader'''
显示数据集
'''
def sampling(x,y,batch):loader = load(x,y,batch)for epoch in range(1):print("\n--------------------")for batch_idx, (batch_x, batch_y) in enumerate(loader):#print("\n batch_idx:{},\n batch_x:{}, \n batch_y:{}".format(batch_idx, batch_x, batch_y))return batch_x, batch_y'''
随机采样的API
'''
def sampling(x,y,batch,N):indices = np.arange(0,N)np.random.shuffle(indices)indices1 = indices[0:batch]index = torch.tensor(indices1,dtype=torch.int)#indices = torch.tensor([0, 2])trainData = torch.index_select(x, 0, index) #行抽取trainLabel = torch.index_select(y, 0, index) #行抽取print("\n trainlabel ",trainLabel)return trainData, trainLabel----------------
# -*- coding: utf-8 -*-
"""
Created on Tue Nov  8 17:09:56 2022@author: chengxf2
https://blog.51cto.com/u_15132389/4755744
"""
import numpy as np
import torch
from sklearn.datasets import load_iris
import sampling
import torch.nn.functional as Fclass BP:'''损失值argsy: 标签值predY: 预测值  [150, 4]return loss 值'''def loss(self, y, predY):s = -torch.mm(y.T, torch.log(predY))loss = s.numpy()[0,0]#print("\n s ",loss)return s'''激活函数argsx: 输入returny: 输出'''def softmax(self,x):y =  F.softmax(x,dim=0) #1 行 """z = torch.exp(x)s = z.sum()y = z/s"""return y'''训练argstrainData: 训练数据集trai'''def train(self):m=150W =0trainData = self.xtrainLabel = self.yW = torch.ones((3,4))m,n = self.x.shape[0],self.x.shape[1]print("\n m ",m, "\t n ",n)trainData, trainLabel = sampling.sampling(self.x,self.y, self.batch,m)for j in range(self.maxIter):for i in  range(self.batch):x = trainData[i].view(4,1)y = trainLabel[i].view(3,1)a = torch.mm(W, x)predY = self.softmax(a)deltaW = torch.mm(predY-y,x.T)W= W-self.learnRate*deltaWloss = self.loss(y, predY)print("\n  i %d   loss %7.3f"%(j,loss))print(W)'''加载数据集#[100,4]'''def load_data(self):iris = load_iris()x = iris.data    #数据y = iris.target  #特征print("\n数据集数据的形状:", x.shape) #[150,4]print("\n数据集的标签:\n", y) #[0,1,2]self.x = torch.tensor(x, dtype=torch.float)self.m, self.n = self.x.shape[0], self.x.shape[1]self.y =torch.zeros([self.m,3],dtype=torch.float)#one-hotfor i in range(self.m):j = y[i]self.y[i,j] =1.0def __init__(self):self.m = 0self.n = 0 self.batch = 20 #从每类数据中随机选取40个self.maxIter = 1000 #最大迭代次数self.learnRate = 0.1 #学习率if __name__ == "__main__":bp = BP()bp.load_data()bp.train()

神经网络与深度学习-9- 网络结构 -PyTorch相关推荐

  1. 深度学习入门之PyTorch学习笔记:卷积神经网络

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 4 卷积神经网络 4.1 主要任务及起源 4.2 卷积神经网络的原理和结构 4.2.1 卷积层 1. ...

  2. 【深度学习】基于Pytorch进行深度神经网络计算(一)

    [深度学习]基于Pytorch进行深度神经网络计算(一) 文章目录 1 层和块 2 自定义块 3 顺序块 4 在正向传播函数中执行代码 5 嵌套块 6 参数管理(不重要) 7 参数初始化(重要) 8 ...

  3. 【深度学习】基于Pytorch进行深度神经网络计算(二)

    [深度学习]基于Pytorch进行深度神经网络计算(二) 文章目录 1 延后初始化 2 Pytorch自定义层2.1 不带参数的层2.2 带参数的层 3 基于Pytorch存取文件 4 torch.n ...

  4. 【深度学习】基于Pytorch的卷积神经网络概念解析和API妙用(一)

    [深度学习]基于Pytorch的卷积神经网络API妙用(一) 文章目录 1 不变性 2 卷积的数学分析 3 通道 4 互相关运算 5 图像中目标的边缘检测 6 基于Pytorch的卷积核 7 特征映射 ...

  5. 【深度学习】基于Pytorch的卷积神经网络概念解析和API妙用(二)

    [深度学习]基于Pytorch的卷积神经网络API妙用(二) 文章目录1 Padding和Stride 2 多输入多输出Channel 3 1*1 Conv(笔者在看教程时,理解为降维和升维) 4 池 ...

  6. DL:基于神经网络的深度学习模型的总概览简介(DNN/CNN/RNN等)、各种网络结构对比、案例应用对比之详细攻略

    DL:基于神经网络的深度学习模型的总概览简介(DNN/CNN/RNN等).各种网络结构对比.案例应用对比之详细攻略 目录 神经网络所有模型的简介(概览) DNN.CNN.RNN结构对比 相关文章 DL ...

  7. 深度学习入门之PyTorch学习笔记:深度学习框架

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 2.1 深度学习框架介绍 2.1.1 TensorFlow 2.1.2 Caffe 2.1.3 Theano 2.1.4 ...

  8. 深度学习入门之PyTorch学习笔记:深度学习介绍

    深度学习入门之PyTorch学习笔记:深度学习介绍 绪论 1 深度学习介绍 1.1 人工智能 1.2 数据挖掘.机器学习.深度学习 1.2.1 数据挖掘 1.2.2 机器学习 1.2.3 深度学习 第 ...

  9. 《神经网络与深度学习》nndl读书笔记

    目录 本书的知识体系 深度学习与神经网络概要 人工智能 机器学习 机器学习模型步骤 表示学习 局部表示与分布式表示 深度学习 常用的深度学习框架 端到端学习 神经网络 人工神经网络 神经网络的发展历史 ...

最新文章

  1. CollegeStudent
  2. python北京时间代码_python代码定时同步本机的北京时间详解
  3. jsp: jstl标签库 uri标签
  4. freemarker变量自加
  5. 图表中各个参数的应用( AChartEngine XMultipleSeriesRenderer
  6. 1.阿里云RDS配置白名单,实例,外网地址,mysql数据库。
  7. linux 制作yum,Linux制作本地yum
  8. cximage 控制台 程序 显示图片_VisualStudio创建程序(Create a program)
  9. js:{}与new Object()的区别是什么
  10. Android 实现卫星菜单
  11. 斐讯k2修改dns服务器,斐讯K2固件修改的一些信息
  12. 整理与随笔——抽象代数 第一章 群 1.1-1.2 代数体系、半群与群
  13. VM12虚拟机安装MAC系统,解决常见错误
  14. GEE基本概念(二)——3. filtermapreducer
  15. 电源线噪声:共模干扰、差模干扰
  16. keil4怎么建立c语言工程,第5节:用keil软件新建,关闭,打开一个完整工程的操作流程...
  17. CV各领域牛人及资源-有些网页已很久没更新
  18. k30pro杀进程严重怎么解决_命运2掉帧严重怎么解决?GoLink免费加速器助力玩家稳定畅玩...
  19. 玩游戏掉帧严重?看过来!
  20. 【转载】关于XSS(跨站脚本攻击)和CSRF(跨站请求伪造)

热门文章

  1. mPaaS 服务端核心组件:消息推送 MPS 架构及流程设计
  2. 增长的旋律——AARRR模式思考(二)
  3. 30分钟理解关键链--《突破项目的瓶颈--关键链 》读书笔记
  4. 常用的在线JS解密工具
  5. storm风暴英雄 tempo_暴雪发布2018《风暴英雄》HGC战队实力排行榜
  6. new BigDecimal比较大小
  7. java中抓阄_有种取名是让宝宝“抓阄”选,宝妈打开纸条后笑了:你自己选的...
  8. 测试 RAM 盘和 DISK 盘的文件读写速度
  9. 将3060独显笔记本升级为高级AI工作站
  10. Shiro的Java原生反序列化漏洞