李沐深度学习记录2:10多层感知机

一.简要知识记录

x.numel():看向量或矩阵里元素个数
A.sum():向量或矩阵求和,axis参数可对某维度求和,keepdims参数设置是否保持维度不变
A.cumsum:axis参数设置沿某一维度计算矩阵累计和x*y:向量的按元素乘法
torch.dot(x,y):向量的点乘(点积or内积),结果是标量。公式,向量a点积向量b=|a||b|cos两向量夹角。向量点积即x的转置与向量y相乘,即对应元素相乘相加得数值。
torch.sum(x*y):计算向量点积的另一方式,执行向量的按元素乘法得向量,再对向量求和。torch.mul(A,x):两个变量对应元素相乘。A为矩阵时,x可以是一个数,也可以是向量(支持广播机制)。若A(m,n),x为向量时,x只能(1,n)(m,1)即选择与矩阵A每行向量对应元素想乘或者与矩阵A每列向量对应元素想乘,显然(n,1)(1,m)维度不符合形式。
torch.mv(A,X):矩阵向量积,矩阵乘以向量。A*B:矩阵的按元素乘法,称为Hadamard积。
torch.mm(A,B):矩阵乘法。但是注意,高维矩阵(二维以上)不可以使用mm(),应当使用matmul().torch.abs(x).sum():计算向量的L1范数,即先计算各项绝对值,再求和。
torch.norm(x):计算向量的L2范数。L2范数是向量元素平方和的平方根
torch.norm(A):类似于向量的L2范数,矩阵A的Frobenius范数是矩阵元素平方和的平方根。梯度和等高线正交,梯度指向值变化最大的方向1.线性回归:估计一个连续值
公式(对于单个样本,向量内积),y=<w,x>+b  (<w,x>向量内积得标量) ;
公式(对于多个样本,矩阵乘法),y=w*x+b    x维度[batchsize,m], w维度[m,1], b维度[1]是个标量,输出维度[batchsize,1]
损失函数,平方损失 ;
输出:输出只有一个连续值表预测 2.softmax回归:预测一个离散类别;设类别数n
公式(对多个样本):1)y=w*x+b;x维度[batchsize,m], w维度[m,n] ,b维度[1,n], 输出维度[batchsize,n]2)y=softmax(o);o是1)的输出值,通过softmax将其转化为概率输出,即n个值和为1
损失函数;交叉熵( H(p,q)=求和-pi*log(qi) )常用于衡量两个概率的区别,一个是正确类别进行的一位有效编码,一个是2)的预测概率输出
输出:输出n个类别的概率预测
另,逻辑斯蒂回归是softmax回归二分类的一种特殊形式3.单层感知机:二分类
公式(对于单个样本):o=硬sigmoid(<w,x>+b)  硬sigmoid(x)=1(x>0) or -1(otherwise) 
损失函数:等价于使用批量大小为1的梯度下降,具体如下
l=max(0,-y<w,x>)  当预测值<w,x>与真实值y符号相同即均大于0或均小于0,该样本预测正确,此时-y<w,x>小于0,损失函数l=0当预测值<w,x>与真实值y符号不同,该样本预测错误,此时-y<w,x>大于0,损失函数l=-y<w,x>
存在问题,无法解决XOR二分类问题多层感知机-单分类即二分类
公式(对多个样本):h=sigmoid(w1*x+b1)  输入x维度(batchsize,n),隐藏层w1维度(n,m), b1维度(1,m), 隐藏层输出维度(batchsize,m)o=w2*h+b2  输入h维度(batchsize,m),输出层w2维度(m,1), b2维度(1)标量,输出o维度(batchsize,1) 
关于激活函数:sigmoid:[0,1]     Tanh: [-1,1]     ReLU: max(x,0)  常用ReLU,因为它没有指数运算,而指数计算很贵多层感知机-多分类
公式(对多个样本):h=sigmoid(w1*x+b1)  输入x维度(batchsize,n),隐藏层w1维度(n,m), b1维度(1,m), 隐藏层输出维度(batchsize,m)o=w2*h+b2   输入h维度(batchsize,m),输出层w2维度(m,k), b2维度(k,1),输出o维度(batchsize,k) y=softmax(o)  通过softmax将k个值转化为概率
损失函数:交叉熵
超参数:隐藏层数;每个隐藏层的大小
另,多层感知机多分类与softmax回归多分类区别只是多了隐藏层部分

2.多层感知机从零开始实现

import torch
from torch import nn
from d2l import torch as d2l#数据加载
batch_size=256
train_iter,test_iter=d2l.load_data_fashion_mnist(batch_size)实现一个具有单隐藏层的多层感知机
#初始化模型参数
#注意对于隐藏层的宽度,常选择2的若干次幂作为层的宽度,可以使得计算更高效
num_inputs,num_outputs,num_hiddens=784,10,256#nn.Parameter()是pytorch一个类,用于创建可训练的参数(权重和偏置),这些参数会在模型训练过程中自动更新
# w1=nn.Parameter(torch.normal(0,0.01,(num_inputs,num_hiddens),requires_grad=True)*0.01)
w1=nn.Parameter(torch.randn(num_inputs,num_hiddens,requires_grad=True)*0.01)
b1=nn.Parameter(torch.zeros(num_hiddens,requires_grad=True))
w2=nn.Parameter(torch.randn(num_hiddens,num_outputs,requires_grad=True)*0.01)
b2=nn.Parameter(torch.zeros(num_outputs,requires_grad=True))params=[w1,b1,w2,b2]#激活函数-实现ReLU函数
def relu(X):a=torch.zeros_like(X) #torch.zeros_like生成和括号内变量维度一致的全是0的内容return torch.max(X,a)#模型
#忽略空间结构,需要使用reshape将每个二维图像转换为一个长度为num_inputs的向量
def net(X):X=X.reshape((-1,num_inputs)) #(batchsize,1,28,28)->(batchsize,784)H=relu(X@w1+b1) #X矩阵(batchsize,784),w1矩阵(784,256),@则为矩阵乘法得(batchsize,256),b1(1,256)return (H@w2+b2) #H矩阵(batchsize,256),w1矩阵(256,10),@则为矩阵乘法得(batchsize,10),b2(1,10)#损失函数
#计算softmax和交叉熵
loss=nn.CrossEntropyLoss(reduction='none') #不对损失求和或求平均,得到一个向量包含batchsize份损失,即每个样本的损失#训练
#由于多层感知机训练过程与softmax回归完全相同,因此可以直接调用d2l包的train_ch3函数
num_epochs,lr=10,0.1
updater=torch.optim.SGD(params,lr=lr)
d2l.train_ch3(net,train_iter,test_iter,loss,num_epochs,updater)#在一些数据上应用模型
d2l.predict_ch3(net,test_iter)

在这里插入图片描述
在这里插入图片描述

三.多层感知机简介实现

import torch
from torch import nn
from d2l import torch as d2l#加载数据
batch_size=256
train_iter,test_iter=d2l.load_data_fashion_mnist(batch_size)#模型
#与softmax回归的简洁实现,唯一区别是添加了2个全连接层
#第一层隐藏层,包含256个隐藏单元,并使用ReLU激活函数。第二层是输出层
#nn.Flatten()除了第0维度batchsize保留,其余维度全部展平为一维向量
net=nn.Sequential(nn.Flatten(),nn.Linear(784,256),nn.ReLU(),nn.Linear(256,10))
#参数初始化
#nn.Linear的weight和bias会自动初始化,这里使用init_weight只是不希望采用对weight的默认初始化,对bias采用默认初始化就可以
def init_weights(m):if type(m)==nn.Linear:nn.init.normal_(m.weight,std=0.01)net.apply(init_weights);#损失函数
loss=nn.CrossEntropyLoss(reduction='none')#优化算法
trainer=torch.optim.SGD(net.parameters(),lr=lr)#训练
num_epochs,lr=10,0.1
d2l.train_ch3(net,train_iter,test_iter,loss,num_epochs,trainer)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/149950.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时间序列常用数据处理

1.组合技巧Compose 1.2 实例应用及其解释 # 用于组合多个数据处理方法 class Compose(object):def __init__(self, transforms):self.transforms transformsdef __call__(self, seq):for t in self.transforms:seq t(seq)return seq 这段Python代码定义了一个名为Compose的…

【Spring Boot】日志文件

日志文件 一. 日志文件有什么用二. 日志怎么用三. ⾃定义⽇志打印1. 在程序中得到⽇志对象2. 使⽤⽇志对象打印⽇志3. ⽇志格式说明 四. 日志级别1. ⽇志级别有什么⽤2. ⽇志级别的分类与使⽤ 五. 日志持久化六. 更简单的⽇志输出—lombok1. 添加 lombok 依赖2. 输出⽇志3. lom…

Javascript - 轮播图

轮播图也称banner图、广告图、焦点图、滑片。是指在一个模块或者窗口,通过鼠标点击或手指滑动后,可以看到多张图片。这些图片统称为轮播图,这个模块叫做轮播模块。可以通过运用 javascript去实现定时自动转换图片。以下通过一个小Demo演示如何运用Javascript实现。 <!DOCTYP…

《计算机视觉中的多视图几何》笔记(12)

12 Structure Computation 本章讲述如何在已知基本矩阵 F F F和两幅图像中若干对对应点 x ↔ x ′ x \leftrightarrow x x↔x′的情况下计算三维空间点 X X X的位置。 文章目录 12 Structure Computation12.1 Problem statement12.2 Linear triangulation methods12.3 Geomet…

【Java】内部类

目录 概念&#xff1a; 内部类访问特点 示例代码&#xff1a; 运行结果&#xff1a; 内部类分类 1. 成员内部类 示例代码&#xff1a; 2. 静态内部类 示例代码&#xff1a; 3. 方法内部类(局部内部类) 示例代码&#xff1a; 4. 匿名内部类 示例代码&#xff1a; 概…

【开发篇】十七、消息:模拟订单短信通知

文章目录 1、消息2、JMS3、AMQP4、案例&#xff1a;模拟订单短信通知 相关文章&#xff1a; 【同步通讯与异步通讯】 1、消息 消息的发送方&#xff0c;即生产者。消息的接收方&#xff0c;即消费者。同步通信就行打视频&#xff0c;等着对方接电话才能继续往下&#xff0c;而…

文件编码格式

一、问题场景 笔者在写controller层出现了一些小问题&#xff1a;测试controller层的一些请求的时候&#xff0c;后端控制台打印的是乱码&#xff0c;网上找了很多说改UTF-8的&#xff0c;但是我去设置里面全部都改为UTF-8了&#xff0c;结果仍然无济于事&#xff0c;甚至还把…

泊车功能专题介绍 ———— AVP系统基础数据交互内容

文章目录 系统架构系统功能描述云端子系统车辆子系统场端子系统用户APP 工作流程基础数据交互内容AVP 系统基础数据交互服务车/用户 - 云基础数据交互内容车位查询工作流程技术要求数据交互要求 车位预约工作流程技术要求数据交互要求 取消预约工作流程技术要求数据交互要求 泊…

2023最新ICP备案查询系统源码 附教程 Thinkphp框架

2023最新ICP备案查询系统源码 附教程 thinkphp框架 本系统支持网址备案&#xff0c;小程序备案&#xff0c;APP备案查询&#xff0c;快应用备案查询 优势&#xff1a; 响应速度快&#xff0c;没有延迟&#xff0c;没有缓存&#xff0c;数据与官方同步 源码下载&#xff1a;ht…

关于MAC电脑无法正常登陆H3C iNodes登陆的解决办法

背景 前段时间&#xff0c;单位的网络在做升级改造&#xff0c;网络出口也进行彻底调整同时单位的网络出口设备做了机房物理迁移&#xff0c;迁移后网络正常使用&#xff0c;但是出现自己的MAC电脑无法登陆iNodes问题&#xff0c;总是出现“正在查询SSL 网关参数..查询SSL 网关…

sheng的学习笔记-【中文】【吴恩达课后测验】Course 2 - 改善深层神经网络 - 第二周测验

课程2_第2周_测验题 目录&#xff1a;目录 第一题 1.当输入从第8个mini-batch的第7个的例子的时候&#xff0c;你会用哪种符号表示第3层的激活&#xff1f; A. 【  】 a [ 3 ] { 8 } ( 7 ) a^{[3]\{8\}(7)} a[3]{8}(7) B. 【  】 a [ 8 ] { 7 } ( 3 ) a^{[8]\{7\}(3)} a…

无状态自动配置 DHCPv6无状态配置 DHCPv6有状态配置

1、无状态自动配置 配置命令 AR1 ipv6 #开启路由器ipv6报文转发功能 interface GigabitEthernet0/0/0 ipv6 enable #开启路由器接口IPv6报文转发功能 ipv6 address FC01::1/64 …

怎么将Linux上的文件上传到github上

文章目录 1. 先在window浏览器中创建一个存储项目的仓库2. 复制你的ssh下的地址1) 生成ssh密钥 : 在Linux虚拟机的终端中,运行以下命令生成ssh密钥2)将ssh密钥添加到github账号 : 运行以下命令来获取公钥内容: 3. 克隆GitHub存储库&#xff1a;在Linux虚拟机的终端中&#xff0…

Springboot实现登录功能(token、redis、登录拦截器、全局异常处理)

登录流程&#xff1a; 1、前端调用登录接口&#xff0c;往接口里传入账号&#xff0c;密码 2、根据账号判断是否有这个用户&#xff0c;如果有则继续判断密码是否正确 3、验证成功后&#xff0c;则是根据账号&#xff0c;登录时间生成token&#xff08;用JWT&#xff09; 4、将…

数据结构与算法(四):哈希表

参考引用 Hello 算法 Github&#xff1a;hello-algo 1. 哈希表 1.1 哈希表概述 哈希表&#xff08;hash table&#xff09;&#xff0c;又称散列表&#xff0c;其通过建立键 key 与值 value 之间的映射&#xff0c;实现高效的元素查询 具体而言&#xff0c;向哈希表输入一个键…

VR开发(一)——SteamVR实现摇杆移动

一、基础环境搭建 1.AssetStore 找到SteamVR并导入&#xff1b; 2.添加一个 VR 中代表玩家自己的物体。我可以打开 Assets/SteamVR/InteractionSystem/Core 文件夹&#xff0c;将 Player 物体拖入场景&#xff1a; 二、修改手柄按钮映射集 3.windows/steamVR input&#xff…

Http常见问题

说说 HTTP 常用的状态码及其含义&#xff1f; HTTP 状态码首先应该知道个大概的分类&#xff1a; 1XX&#xff1a;信息性状态码2XX&#xff1a;成功状态码3XX&#xff1a;重定向状态码4XX&#xff1a;客户端错误状态码5XX&#xff1a;服务端错误状态码 301&#xff1a;永久性…

C#,数值计算——数据建模FGauss的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class FGauss : MultiFuncd { public void funk(double x, double[] a, ref double y, double[] dyda) { int na a.Length; y 0.0; for (int …

卷积网络的发展历史-LeNet

简介 LeNet是CNN结构的开山鼻祖&#xff0c;第一次定义了卷积神经网络的结构。 LeNet模型包含了多个卷积层和池化层&#xff0c;以及最后的全连接层用于分类。其中&#xff0c;每个卷积层都包含了一个卷积操作和一个非线性激活函数&#xff0c;用于提取输入图像的特征。池化层…

TCP端口崩溃,msg:socket(): Too many open files

一、现象 linux系统中运行了一个TCP服务器&#xff0c;该服务器监听的TCP端口为10000。但是长时间运行时发现该端口会崩溃&#xff0c;TCP客户端连接该端口会失败&#xff1a; 可以看到进行三次握手时&#xff0c;TCP客户端向该TCP服务器的10000端口发送了SYN报文&#xff0c;…