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

上期文章

【每日算法】理论:深度学习基础 刷题: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负责pop
    def __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 None
        if 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 ans

    def 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 None
        for 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_in
        return self.queue_out.popleft()

    def top(self) -> int:
        if self.empty():
            return None
        for 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_in
        temp = self.queue_out.popleft()
        self.queue_in.append(temp)
        return temp

    def 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.mfbz.cn/a/572564.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue2学习笔记(尚硅谷天禹老师)

目录 一、入门案例 二、模板语法 三、数据绑定 四、el和data的两种写法 五、MVVM模型 六、Object.defineproperty方法 七、Vue中响应式原理 八、数据代理 九、methods配置项 十、Vue中的事件处理 十一、Vue中的键盘事件 十二、计算属性 十三、监视属性watch 十四、绑定Class样式…

【echarts】数据起点不从X轴的原点开始【不从0开始】

echarts折线图x轴不从0开始怎么办? 或者说为什么有些图是这样的 有些却是这样的 原因出在这里: boundaryGap: false 默认是true,是指坐标轴两边留白。改为false:不留白即从原点开始。 看一下官方的说明

中小型企业网络实战topo

1、设备命名,务必按照规范进行命名规划; 2、子网划分,申请到了公网地址段,201.1.1.0/24,根据公司的实际情况,合理规划拓扑需要的公网地址, 做到合理规划不浪费; 3、子网划分&a…

嵌入式开发学习--进程、线程

什么是进程 进程和程序的区别 概念 程序:编译好的可执行文件,存放在磁盘上的指令和数据的有序集合(文件),程序是静态的,没有任何执行的概念。 进程:一个独立的可调度的任务,执行一…

做抖音小店如何选品?这几个技巧,精准“锁定”爆品!

哈喽~我是电商月月 做抖音小店最重要的就是选品,这点大家都知道 一个店铺商品选的好,顾客喜欢,质量完好,销量和售后都不用操心,和达人合作时,爆单的机会也就越高 那这种商品是什么样的,新手开…

基于ssm微信小程序的4S店客户管理系统

采用技术 基于ssm微信小程序的4S店客户管理系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringMVCMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 管理员端 管理员登录 管理员首页 用户管理 门店管理 …

RustGUI学习(iced)之小部件(一):如何使用按钮和文本标签部件

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述…

高效一键改写文章,智能伪原创工具轻松搞定

在信息爆炸的时代,想要高效率的一键改写文章却是很多创作者都想了解的方法。然而在人工智能技术发展的今天,智能伪原创工具的出现,也正是成了广大创作者用来一键改写文章的好方法,因为它的优势,可以为大家轻松完成改写…

光伏二次设备主要有哪些

光伏电站二次设备类型比较多,信息显示、数据安全、远动通信、电能质量、微机保护等都有不同设备相互配合完成,根据项目具体需求来选择,简单可以分为以下几种: 一、光伏二次设备保护屏: 1、光伏二次设备预制舱 二次设…

短视频矩阵系统源码====3年技术公司源头开发商交付

短视频矩阵系统#源头技术打磨 哈尔滨爆火带动了一波“北上热潮”,各地文旅坐不住了,兄弟们开“卷”!这波互卷浪潮中,河南率先出圈。如今,河南文旅账号粉丝已经突破200w! 01 矩阵打法,很难不火…

超越边界:如何ChatGPT 3.5、GPT-4、DALL·E 3和Midjourney共同重塑创意产业

KKAI(kkai人工智能)是一个整合了多种尖端人工智能技术的多功能助手平台,融合了OpenAI开发的ChatGPT3.5、GPT4.0以及DALLE 3,并包括了独立的图像生成AI—Midjourney。以下是这些技术的详细介绍: **ChatGPT3.5**&#xf…

Lab2: system calls

Using gdb Looking at the backtrace output, which function called syscall? 可以看到是trap.c中usertrap函数调用了syscall函数 What is the value of p->trapframe->a7 and what does that value represent? p->trapframe->a7的值为7,代表了函…

MATLAB 条件语句

MATLAB 条件语句 决策结构要求程序员应指定一个或多个要由程序评估或测试的条件,如果确定条件为真,则应指定要执行的一个或多个语句,如果条件为真,则可以选择要执行的其他语句。条件确定为假。 以下是大多数编程语言中常见的典型…

我们支持批量了!

当我们有很多文件要处理时,一个一个操作不仅费时费力,而且还容易漏掉某个文件。那么有没有更加简单的方法呢?可以试试批量功能! 目前以下功能都支持批量操作 音频提取 视频格式转换 字幕生成 视频静音 图片格式转换 图片压缩 视频…

JavaScript —— APIs(四)

一、日期对象 1. 实例化 new 括号里面为空,得到当前时刻的时间 括号里面为指定日期,得到对应日期的时间 注意:若括号里面只有年月日,没有时间,则得到的结果就没有时间;括号里面指定时间是多少,…

身份证二要素核验介绍及使用方法

一、身份证二要素核验简介及重要性 身份证二要素核验是一种重要的身份验证技术,它在现代社会中发挥着至关重要的作用,特别是在涉及个人信息安全和隐私保护的领域。通过身份证二要素核验,我们可以有效地确认个人身份的真实性,从而…

爬虫学习笔记-数美验证

测试网址:智能验证码体验_图片验证码_数美科技数美科技智能验证码在线体验,智能识别风险用户级别,自行切换智能验证码难度及类型,提供滑动、拼图、点选、数字、动态等多种智能验证码服务,精准拦截机器行为。https://ww…

SOLIDWORKS Composer如何使用3D工具实现更真实的动画效果

当我们使用SOLIDWORKS composer创建动画时,往往会涉及到产品的安装与拆解,现实生活中我们在拆卸组装产品的时候,我们往往需要一些工具的协助,比如扳手、螺丝刀等等,那么我们如何在虚拟动画中也将这一过程以逼真的形式展…

新建云仓库

1.GitHub新建云仓库: LICENSE:开源许可证;README.md:仓库说明文件;开源项目;cocoaPodsName.podspec: CocoaPods项目的属性描述文件。 2.Coding新建云仓库: 备注: Coding新建项目:

STM32,复位和时钟控制

外部时钟 HSE 以后需要用到什么就这样直接拿去配就行了