【每日算法】理论:深度学习基础 刷题:栈与队列的转换

上期文章

【每日算法】理论:深度学习基础 刷题:KMP算法思想

文章目录

  • 上期文章
  • 一、上期问题
  • 二、本期理论问题
      • 1、RAW图像和RGB图像的区别?
      • 2、LSTM模型
      • 3、卷积层和池化层有什么区别
      • 4、tokenizer 的分词方法有那些?
      • 5、10亿个参数的模型,部署后占用多大显存?
      • 6、Textual Inversion模型
  • 三、力扣刷题回顾-栈与队列
      • 232.用栈实现队列
      • 225. 用队列实现栈


一、上期问题

  • 注意力机制
  • BatchNorm 和 LayerNorm 的区别
  • Bert 的参数量是怎么决定的。
  • 为什么现在的大语言模型都采用Decoder only架构?
  • 什么是梯度消失和爆炸
  • 梯度消失和梯度爆炸产生的原因

二、本期理论问题

1、RAW图像和RGB图像的区别?

  • RAW格式: 从相机传感器端获取的原始数字格式的数据, 又称为Bayer格式. 每个像素信息只有RGB中的某个颜色信息, 且每4个像素中有2个像素为G信息,1个R信息,1个B信息, 即GRBG格式。
  • RGB格式: RGB格式是由RAW数据插值计算后获取的、每个像素均包含了RGB三种颜色的信息。

2、LSTM模型

长短期记忆(LSTM)模型是一种特殊类型的循环神经网络,用于处理序列数据。LSTM于1997年提出,专门设计用来解决标准RNN在训练过程中遇到的梯度消失问题。与传统的RNN不同,LSTM拥有三个“门”结构(输入门、遗忘门、输出门)和一个单元状态,这使得LSTM能够有选择地记住或忘记序列中的信息。具体来说:

  • 输入门决定了哪些新的信息会被存入单元状态。
  • 遗忘门控制了哪些旧的信息会被遗忘或者从单元状态中移除。
  • 输出门决定了下一个隐藏状态(也就是下一时刻的输出)应该包含哪些信息。

这些门的存在使得LSTM可以学习长期依赖关系,即在序列中,当前的输出可能依赖于很远的过去的输入。LSTM已被广泛应用于各种需要处理序列数据的任务中,包括语音识别、语言模型、机器翻译、情感分析等。

3、卷积层和池化层有什么区别

卷积层有参数,池化层没有参数;
经过卷积层节点矩阵深度会改变,而池化层不会改变节点矩阵的深度,但是它可以缩小节点矩阵的大小。

4、tokenizer 的分词方法有那些?

基于规则的分词:根据语言的特点和规则进行分词,如中文的逐字分词或者英文的空格分词。
基于词典的分词:利用预先构建好的词典,将输入文本切分成词语或者子词。
子词切分:将词汇表中的单词进行进一步切分,得到更加细粒度的子词,如 Byte Pair Encoding(BPE)或者WordPiece。

5、10亿个参数的模型,部署后占用多大显存?

目前模型的参数绝大多数都是float32类型, 占用4个字节。所以一个粗略的计算方法就是,每10亿个参数,占用约4G显存(实际应该是10^9*4/1024/1024/1024=3.725G)。

6、Textual Inversion模型

Textual Inversion模型的作用在于将独特的对象注入新场景,将它们转换成不同的风格,转移姿势,减少偏见,甚至想象新产品。Textual Inversion模型影响的是模型的embedding部分,以SD为例,就是将SD的子模块text_encoder中的token embedding部分通过训练增加了伪标签的嵌入向量,其他模块均保持不变,所以训练速度超快,效果也很明显。具体来说,首先需要定义一个在现有模型中没有的关键词 S ∗ S* S来表示我们希望学习的新概念,也被称为pseudo word;新的关键词会和其他的关键词一样,学习到对应的特征嵌入 V ∗ V∗ V。这样就将新概念注入到了模型的词汇中;然后,这个pseudo word就会像其他词一样被正常处理,并可用于为生成模型编写新的句子。
Textual Inversion:使用文本反转个性化文本到图像的生成

三、力扣刷题回顾-栈与队列

上期涉及题目:

  • 151.翻转字符串里的单词
  • 右旋字符串
  • 28. 实现 strStr()
  • 459.重复的子字符串

本期题目:

  • 232.用栈实现队列
  • 225. 用队列实现栈

232.用栈实现队列:

  • 要求:仅使用两个栈实现先入先出队列,支持一般队列支持的所有操作(push、pop、peek、empty)。

225. 用队列实现栈:

  • 要求:仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。

对比分析:
232.用栈实现队列225. 用队列实现栈两道题主要考查的是对栈和队列这两种数据结构的理解。栈是先进后出,队列是先进先出。要实现栈向队列的转换,可以定义两个栈:一个输入栈和一个输出栈;要实现队列向栈的转换,也可以定义两个队列,只不过没有输入和输出的关系,而是将其中一个队列作为备份。


232.用栈实现队列

定义两个栈实现先入先出:in负责push,out负责pop

  • push:直接用append函数加入到in栈中即可
  • pop:如果栈为空,则返回None,如果out栈有值则直接从out栈中弹出即可,否则就先按顺序把in栈的元素取出输入到out栈中,然后从out栈弹出
  • peek:采用pop函数得到对应的元素,然后再加回out栈即可
  • empty:两个栈都为空则说明队列为空
class MyQueue:# 定义两个栈实现先入先出:in负责push,out负责popdef __init__(self):self.stack_in = []self.stack_out = []# 将元素推到队列的末尾def push(self, x: int) -> None:self.stack_in.append(x)# 由于栈是先进后出的,因此需要两个栈实现先进先出的队列# 具体操作为:依次取出in栈中的元素,加入到out栈中,然后从out栈中取出就能保证从out栈中先出的是之前先进入in栈的元素def pop(self) -> int:if self.empty():return Noneif self.stack_out:return self.stack_out.pop()else:for i in range(len(self.stack_in)):self.stack_out.append(self.stack_in.pop())return self.stack_out.pop()# peek函数要求返回队列开头的元素def peek(self) -> int:ans = self.pop()self.stack_out.append(ans)return ansdef empty(self) -> bool:return not (self.stack_in or self.stack_out)# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()

225. 用队列实现栈

定义两个队列实现栈:其中一个队列用于备份

  • push:直接用append函数加入到que1中即可
  • pop:把que1最后面的元素以外的元素都备份到que2,然后弹出最后面的元素,再把其他元素从que2导回que1
  • top:采用pop函数的逻辑得到对应的元素,然后再加回队列即可
  • empty:两个队列都为空则说明栈为空
class MyStack:def __init__(self):self.queue_in = deque()self.queue_out = deque()def push(self, x: int) -> None:self.queue_in.append(x)def pop(self) -> int:if self.empty():return Nonefor i in range(len(self.queue_in)-1):self.queue_out.append(self.queue_in.popleft())self.queue_in,self.queue_out = self.queue_out,self.queue_inreturn self.queue_out.popleft()def top(self) -> int:if self.empty():return Nonefor i in range(len(self.queue_in)-1):self.queue_out.append(self.queue_in.popleft())self.queue_in,self.queue_out = self.queue_out,self.queue_intemp = self.queue_out.popleft()self.queue_in.append(temp)return tempdef empty(self) -> bool:return len(self.queue_in) == 0# Your MyStack object will be instantiated and called as such:
# obj = MyStack()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.top()
# param_4 = obj.empty()

参考:
代码随想录算法训练营第九天|理论基础,232.用栈实现队列,225. 用队列实现栈

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

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

相关文章

FPGA实现AXI4总线的读写_如何写axi4逻辑

FPGA实现AXI4总线的读写_如何写axi4逻辑 一、AXI4 接口描述 通道信号源信号描述全局信号aclk主机全局时钟aresetn主机全局复位,低有效写通道地址与控制信号通道M_AXI_WR_awid[3:0]主机写地址ID,用来标志一组写信号M_AXI_WR_awaddr[31:0]主机写地址&…

Nest.js项目初始配置

1.全局安装nest pnpm add -g nestjs/cli nodemon ts-node 2.创建nest项目 nest new project-name 3.安装依赖 pnpm add prisma-binding ts-node prisma/client mockjs nestjs/config class-validator class-transformer argon2 nestjs/passport passport passport-local n…

如何一键清除文件目录下所有的node_modules

如何一键清除文件目录下所有的node_modules 快速删除目录下的node_modules,下面附上windows和mac的脚本指令 windows脚本 FOR /d /r . %d in (node_modules) DO IF EXIST "%d" rm -rf "%d"mac脚本 find . -name "node_modules" -…

最短路问题之Bellman-Ford,SPFA算法,例题 负环

Bellman-Ford算法: Bellman-Ford算法用于解决带有负权边的单源最短路径问题。其基本思想是通过不断地松弛边来逐步求解最短路径。算法的主要步骤如下: 初始化:将源点到各个顶点的距离初始化为无穷大,源点的距离初始化为0。重复更…

JavaScript 变量 及 案例练习

变量 一. 变量是什么: 问题1: 用户输入的数据我们如何存储起来? 答案1: 使用变量 理解变量是如何存储数据的 “容器” **变量: ** 白话: 变量就是一个装东西的盒子通俗: 变量是计算机中用来存储数据的 “容器” , 它可以让计算机变得有记忆注意: 变量不是数据本身, 它们仅…

IDEA2023版本创建Sping项目无法使用Java8

1. 问题复现 1.1 当前版本2023.3.2 1.2 创建项目时:不存在jdk8选项 提示报错 1.3 原因分析 Spring官方发布Spring Boot 3.0.0 的时候告知了一些情况,Java 17将成为未来的主流版本 2. 如何解决 2.1 替换创建项目的源 我们只知道IDEA页面创建Spring项目…

对Java未来的发展趋势和新技术的看法

Java作为一种广泛使用的编程语言,已经走过了数十年的历程,其在企业级应用开发、大数据处理、云计算等多个领域都发挥着重要作用。随着技术的不断进步,Java也在不断发展,呈现出一些新的趋势和新技术。以下是对Java未来发展趋势和新…

Mysql 的char 和varchar的的区别

1、char 和varchar 区别 下面以utf8字符集为例,char和varchar的占比计算,如下图 valueChar(5)bytesVarchar(5)bytesVarchar(100)bytes‘’‘ ’15‘’1‘’1‘abcd’‘abcd ’15‘abcd’13‘abcd’13abcdeabcde15abcde16abcde16 varchar使用…

【PHP快速上手(十四)】

目录 PHP快速上手(十四)PHP 中常用数据库操作使用 WHERE 子句进行条件查询使用 ORDER BY 子句进行排序使用 UPDATE 语句更新数据使用 DELETE 语句删除数据执行事务总结 PHP快速上手(十四) PHP 中常用数据库操作 当使用 PHP 中的…

NumPy 1.26 中文文档翻译完成

NumPy 1.26 中文文档NumPy 用户指南开始入门什么是 NumPy?NumPy 快速开始NumPy: 绝对初学者的基础知识基础与用法NumPy 基础知识MATLAB 用户的 NumPyNumPy 特性NumPy 如何操作高级用法和互操作性从源码编译使用 NumPy C-APIF2PY 用户指南和参考手册开发人员的底层文…

kubernetes中的静态POD

我们都知道,pod是kubelet创建的,那么创建的流程是什么呐? 此时我们需要了解k8s中config.yaml配置文件了: 他的存放路径: 【/var/lib/kubelet/config.yaml】 一、查看静态pod的路径 [K8Sk8s-master ~]$ sudo cat /va…

前端中的promise.all()的使用

理解和使用Promise.all和Promise.race 一、promise.all的使用 说明 Promise.all 可以将多个Promise实例包装成一个新的Promise实例,等待所有都完成(或第一个失败)返回值 成功的时候返回的是一个数组,失败的时候则返回先被…

Linux驱动开发——(五)内核中断

目录 一、内核中断简介 1.1 中断号 1.2 中断API函数 1.2.1 irq_of_parse_and_map函数 1.2.2 gpio_to_irq函数 1.2.3 request_irq函数 1.2.4 free_irq函数 1.2.5 中断处理函数 1.2.6 中断使能与禁止函数 二、上半部(顶半部)与下半部&#xff08…

代码托管基础操作

在待上传代码文件夹中右键,打开Git Bash Here依次输入以下命令: git init(在本地初始化一个代码仓库,具体表现为会在你的文件夹里出现一个隐藏的.git文件夹) git add .(先把代码放到本地的一个缓冲区)添加当前目录下的…

【C++】从零开始认识泛型编程 — 模版

送给大家一句话: 尽管眼下十分艰难,可日后这段经历说不定就会开花结果。总有一天我们都会成为别人的回忆,所以尽力让它美好吧。 – 岩井俊二 \\\ ⱶ˝୧(๑ ⁼̴̀ᐜ⁼̴́๑)૭兯 //// &#…

六、Java+FFmpeg,实战直播推流

目录 类 JavaFFmepegTest run() 方法 openFFmpegExe() 方法 main() 方法 总结 import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io

Unity 时间格式 12小时制与24小时制

using System; using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UniRx; public class DisplayTime : MonoBehaviour { //时间文本显示 [SerializeField] private TextMeshProUGUI _time; private int _timeType 0; enu…

AI大模型探索之路-训练篇3:大语言模型全景解读

文章目录 前言一、语言模型发展历程1. 第一阶段:统计语言模型(Statistical Language Model, SLM)2. 第二阶段:神经语言模型(Neural Language Model, NLM)3. 第三阶段:预训练语言模型&#xff08…

Ali-Sentinel-节点与度量

归档 GitHub: Ali-Sentinel-节点与度量 作用 保存资源的实时统计信息 节点 节点-类结构 com.alibaba.csp.sentinel.slots.statistic.metric.DebugSupport /** 调试支持 */ public interface DebugSupport {void debug(); // 打印统计信息 }com.alibaba.csp.sentinel.n…

Python基础知识(二)

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》 《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 1.输入和输出函数1.1输出函数1.2输入函数 2.常见运算符2.1赋值运算符2.2比较运算符2.3逻辑运算符2.4and逻辑与2.5or逻辑或2.6not逻…