深度学习面试笔试之循环神经网络(RNN)、门控循环单元(GRU)、长短期记忆(LSTM)

深度学习面试笔试之循环神经网络RNN、门控循环单元GRU、长短期记忆LSTM

  • 循环神经网络(RNN)
    • 1. 什么是RNN
      • 1.1 RNN的应用
      • 1.2 为什么有了CNN,还要RNN?
      • 1.3 RNN的网络结构
      • 1.4 双向RNN
      • 1.5 BPTT算法
    • 2. 其它类型的RNN
    • 3. CNN与RNN的区别
    • 4. 为什么RNN 训练的时候Loss波动很大
  • 门控循环单元(GRU)
    • 1. 什么是GRU
    • 2. 门控循环单元
      • 2.1 重置门和更新门
      • 2.2 候选隐藏状态
      • 2.3 隐藏状态
  • 长短期记忆(LSTM)
    • 1. 什么是LSTM
    • 2. 输入门、遗忘门和输出门
    • 3. 候选记忆细胞
    • 4. 记忆细胞
    • 5. 隐藏状态
    • 6. LSTM与GRU的区别
    • 7. LSTM可以使用别的激活函数吗?

循环神经网络(RNN)

1. 什么是RNN

循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network)

1.1 RNN的应用

文本生成(生成序列)、机器翻译、看图说话、文本(情感)分析、智能客服、聊天机器人、语音识别、搜索引擎、个性化推荐

1.2 为什么有了CNN,还要RNN?

传统神经网络(包括CNN),输入和输出都是互相独立的。图像上的猫和狗是分隔开的,但有些任务,后续的输出和之前的内容是相关的。例如:我是中国人,我的母语是____。这是一道填空题,需要依赖于之前的输入。
所以,RNN引入“记忆”的概念,也就是输出需要依赖于之前的输入序列,并把关键输入记住。循环2字来源于其每个元素都执行相同的任务。
它并⾮刚性地记忆所有固定⻓度的序列,而是通过隐藏状态来存储之前时间步的信息。

1.3 RNN的网络结构

首先先上图,然后再解释:

现在我们考虑输入数据存在时间相关性的情况。假设
在这里插入图片描述

是序列中时间步t的小批量输入,
在这里插入图片描述

是该时间步的隐藏变量。那么根据以上结构图当前的隐藏变量的公式如下:

在这里插入图片描述

从以上公式我们可以看出,这⾥我们保存上⼀时间步的隐藏变量 ,并引⼊⼀个新的权重参数,该参数⽤来描述在当前时间步如何使⽤上⼀时间步的隐藏变量。具体来说,时间步 t 的隐藏变量的计算由当前时间步的输入和上一时间步的隐藏变量共同决定。 函数其实就是激活函数。
我们在这⾥添加了 ⼀项。由上式中相邻时间步的隐藏变量 和之间的关系可知,这⾥的隐藏变量能够捕捉截⾄当前时间步的序列的历史信息,就像是神经⽹络当前时间步的状态或记忆⼀样。因此,该隐藏变量也称为隐藏状态。由于隐藏状态在当前时间步的定义使用了上一时间步的隐藏状态,上式的计算是循环的。使用循环计算的网络即循环神经网络(recurrent neural network)。
在时间步t,输出层的输出和多层感知机中的计算类似:

在这里插入图片描述

1.4 双向RNN

之前介绍的循环神经⽹络模型都是假设当前时间步是由前⾯的较早时间步的序列决定的,因此它们都将信息通过隐藏状态从前往后传递。有时候,当前时间步也可能由后⾯时间步决定。例如,当我们写下⼀个句子时,可能会根据句子后⾯的词来修改句子前⾯的⽤词。**双向循环神经网络通过增加从后往前传递信息的隐藏层来更灵活地处理这类信息。**下图演示了一个含单隐藏层的双向循环神经网络的架构。

在这里插入图片描述

在双向循环神经⽹络的架构中,设该时间步正向隐藏状态为

在这里插入图片描述

(正向隐藏单元个数为h),反向隐藏状态为

(反向隐藏单元个数为h)。我们可以分别 计算正向隐藏状态和反向隐藏状态:

在这里插入图片描述

然后我们连结两个⽅向的隐藏状态 来得到隐藏状态,并将其输⼊到输出层。输出层计算输出,(输出个数为q):

在这里插入图片描述

双向循环神经⽹络在每个时间步的隐藏状态同时取决于该时间步之前和之后的子序列(包括当前时间步的输⼊)。

1.5 BPTT算法

在之前你已经见过对于前向传播(上图蓝色箭头所指方向)怎样在神经网络中从左到右地计算这些激活项,直到输出所有地预测结果。而对于反向传播,我想你已经猜到了,反向传播地计算方向(上图红色箭头所指方向)与前向传播基本上是相反的。
我们先定义一个元素损失函数

整个序列的损失函数:

在这里插入图片描述

在这个计算图中,通过 可以计算对应的损失函数,于是计算出第一个时间步的损失函数,然后计算出第二个时间步的损失函数,然后是第三个时间步,一直到最后一个时间步,最后为了计算出总体损失函数,我们要把它们都加起来,通过等式计算出最后的𝐿,也就是把每个单独时间步的损失函数都加起来。然后你就可以通过导数相关的参数,用梯度下降法来更新参数。
在这个反向传播的过程中,最重要的信息传递或者说最重要的递归运算就是这个从右到左的运算,这也就是为什么这个算法有一个很别致的名字,叫做“通过(穿越)时间反向传播(backpropagation through time)”。取这个名字的原因是对于前向传播,你需要从左到右进行计算,在这个过程中,时刻𝑡不断增加。而对于反向传播,你需要从右到左进行计算,就像时间倒流。“通过时间反向传播”,就像穿越时光,这种说法听起来就像是你需要一台时光机来实现这个算法一样。

2. 其它类型的RNN

  • One to one:这个可能没有那么重要,这就是一个小型的标准的神经网络,输入𝑥然后得到输出𝑦。
  • One to many:音乐生成,你的目标是使用一个神经网络输出一些音符。对应于一段音乐,输入𝑥可以是一个整数,表示你想要的音乐类型或者是你想要的音乐的第一个音符,并且如果你什么都不想输入,𝑥可以是空的输入,可设为 0 向量。
  • Many to one:句子分类问题,输入文档,输出文档的类型。
  • Many to many():命名实体识别。
  • Many to many():机器翻译。

在这里插入图片描述

3. CNN与RNN的区别

  1. 结构和工作原理
    CNN(卷积神经网络)
    结构:CNN主要由卷积层、池化层和全连接层组成。
    工作原理:
    卷积层:通过卷积核(滤波器)在输入数据上滑动,提取局部特征。
    池化层:通过降采样操作减少特征图的尺寸,保留重要信息。
    全连接层:将前面提取的特征进行分类或回归。
    特点:擅长处理具有局部相关性的数据,如图像。
    RNN(循环神经网络)
    结构:RNN通过引入循环结构,使得网络可以处理序列数据。
    工作原理:
    循环层:每个时间步的输出不仅取决于当前的输入,还取决于前一时间步的隐藏状态。
    隐藏状态:存储了之前时间步的信息,使得网络可以捕捉时间上的依赖关系。
    特点:擅长处理具有时间依赖性的数据,如文本、语音和时间序列。
  2. 应用场景
    CNN
    图像识别:如物体检测、图像分类、图像分割等。
    视频处理:如动作识别、视频分类等。
    医学影像:如肿瘤检测、病理图像分析等。
    RNN
    自然语言处理:如文本生成、情感分析、机器翻译等。
    语音识别:如语音转文字、语音合成等。
    时间序列预测:如股票价格预测、天气预报等。
  3. 参数共享
    CNN
    参数共享:卷积层中的卷积核在整个输入数据上共享参数,减少了模型的参数数量,提高了模型的泛化能力。
    RNN
    参数共享:循环层中的权重在不同时间步之间共享,使得模型可以处理不同长度的序列数据。
  4. 处理数据类型
    CNN
    静态数据:处理固定大小的输入数据,如图像。
    RNN
    序列数据:处理变长的序列数据,如文本、语音信号。
  5. 模型复杂度
    CNN
    复杂度:通常比RNN简单,尤其是在处理高维数据时,如图像。
    RNN
    复杂度:由于需要处理时间上的依赖关系,RNN的训练通常比CNN更复杂,容易出现梯度消失和梯度爆炸问题。
  6. 变体
    CNN
    变体:包括ResNet、Inception、U-Net等,这些变体通过引入残差连接、多尺度特征融合等技术,进一步提升了模型的性能。
    RNN
    变体:包括LSTM(长短期记忆网络)、GRU(门控循环单元)等,这些变体通过引入门机制,解决了RNN中的梯度消失问题,提高了模型的长期依赖能力。

4. 为什么RNN 训练的时候Loss波动很大

由于RNN特有的memory会影响后期其他的RNN的特点,梯度时大时小,learning rate没法个性化的调整,导致RNN在train的过程中,Loss会震荡起伏,为了解决RNN的这个问题,在训练的时候,可以设置临界值,当梯度大于某个临界值,直接截断,用这个临界值作为梯度的大小,防止大幅震荡。

门控循环单元(GRU)

1. 什么是GRU

在循环神经网络中的梯度计算方法中,我们发现,当时间步数较大或者时间步较小时,**循环神经⽹络的梯度较容易出现衰减或爆炸。虽然裁剪梯度可以应对梯度爆炸,但无法解决梯度衰减的问题。**通常由于这个原因,循环神经网络在实际中较难捕捉时间序列中时间步距离较大的依赖关系。
**门控循环神经网络(gated recurrent neural network)的提出,正是为了更好地捕捉时间序列中时间步距离较大的依赖关系。**它通过可以学习的门来控制信息的流动。其中,门控循环单元(gatedrecurrent unit,GRU)是⼀种常用的门控循环神经网络。

2. 门控循环单元

2.1 重置门和更新门

GRU它引⼊了重置门(reset gate)和更新门(update gate)的概念,从而修改了循环神经网络中隐藏状态的计算方式。
门控循环单元中的重置门和更新门的输入均为当前时间步输入 与上⼀时间步隐藏状态 ,输出由激活函数为sigmoid函数的全连接层计算得到。 如下图所示:

在这里插入图片描述

具体来说,假设隐藏单元个数为 h,给定时间步 t 的小批量输⼊ (样本数为n,输⼊个数为d)和上⼀时间步隐藏状态。重置门 和更新门 的计算如下:

在这里插入图片描述

在这里插入图片描述

sigmoid函数可以将元素的值变换到0和1之间。因此,重置门 和更新门 中每个元素的值域都是[0,1]。

2.2 候选隐藏状态

接下来,门控循环单元将计算候选隐藏状态来辅助稍后的隐藏状态计算。我们将当前时间步重置门的输出与上⼀时间步隐藏状态做按元素乘法(符号为⊙)。如果重置门中元素值接近0,那么意味着重置对应隐藏状态元素为0,即丢弃上⼀时间步的隐藏状态。如果元素值接近1,那么表⽰保留上⼀时间步的隐藏状态。然后,将按元素乘法的结果与当前时间步的输⼊连结,再通过含激活函数tanh的全连接层计算出候选隐藏状态,其所有元素的值域为[-1,1]。

具体来说,时间步 t 的候选隐藏状态, 的计算为:

在这里插入图片描述

从上⾯这个公式可以看出,重置门控制了上⼀时间步的隐藏状态如何流⼊当前时间步的候选隐藏状态。而上⼀时间步的隐藏状态可能包含了时间序列截⾄上⼀时间步的全部历史信息。因此,重置门可以⽤来丢弃与预测无关的历史信息。

2.3 隐藏状态

最后,时间步t的隐藏状态的计算使用当前时间步的更新门 来对上⼀时间步的隐藏状态 和当前时间步的候选隐藏状态 做组合:

在这里插入图片描述

值得注意的是,更新门可以控制隐藏状态应该如何被包含当前时间步信息的候选隐藏状态所更新,如上图所示。假设更新门在时间步 t’到t(t’<t)之间⼀直近似1。那么,在时间步 t’到t间的输入信息几乎没有流入时间步 t 的隐藏状态 实际上,这可以看作是较早时刻的隐藏状态 直通过时间保存并传递⾄当前时间步 t。这个设计可以应对循环神经⽹络中的梯度衰减问题,并更好地捕捉时间序列中时间步距离较⼤的依赖关系。
我们对门控循环单元的设计稍作总结:

  • 重置门有助于捕捉时间序列里短期的依赖关系;
  • 更新门有助于捕捉时间序列里长期的依赖关系。

长短期记忆(LSTM)

1. 什么是LSTM

在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义。我们不会将所有的东西都全部丢弃,然后用空白的大脑进行思考。我们的思想拥有持久性。LSTM就是具备了这一特性。
这篇将介绍另⼀种常用的门控循环神经网络:长短期记忆(long short-term memory,LSTM)。它比门控循环单元的结构稍微复杂⼀点,也是为了解决在RNN网络中梯度衰减的问题,是GRU的一种扩展。
LSTM 中引入了3个门,即输入门(input gate)、遗忘门(forget gate)和输出门(output gate),以及与隐藏状态形状相同的记忆细胞(某些文献把记忆细胞当成⼀种特殊的隐藏状态),从而记录额外的信息。

2. 输入门、遗忘门和输出门

与门控循环单元中的重置门和更新门⼀样,长短期记忆的门的输入均为当前时间步输入 与上⼀时间步隐藏状态 ,输出由激活函数为sigmoid函数的全连接层计算得到。如此⼀来,这3个门元素的值域均为[0, 1]。如下图所示:

具体来说,假设隐藏单元个数为 h,给定时间步 t 的小批量输入 (样本数为n,输⼊个数为d)和上⼀时间步隐藏状态。三个门的公式如下:
输入门

添加图片注释,不超过 140 字(可选)

遗忘问

添加图片注释,不超过 140 字(可选)

输出门

添加图片注释,不超过 140 字(可选)

3. 候选记忆细胞

接下来,长短期记忆需要计算候选记忆细胞 。它的计算与上⾯介绍的3个门类似,但使用了值域在[−1, 1]的tanh函数作为激活函数,如下图所示:

添加图片注释,不超过 140 字(可选)

具体来说,时间步t的候选记忆细胞计算如下:

添加图片注释,不超过 140 字(可选)

4. 记忆细胞

我们可以通过元素值域在[0, 1]的输入门、遗忘门和输出门来控制隐藏状态中信息的流动,这⼀般也是通过使用按元素乘法(符号为⊙)来实现的。当前时间步记忆细胞的计算组合了上⼀时间步记忆细胞和当前时间步候选记忆细胞的信息,并通过遗忘门和输入门来控制信息的流动:

添加图片注释,不超过 140 字(可选)

如下图所示,遗忘门控制上⼀时间步的记忆细胞 中的信息是否传递到当前时间步,而输入门则控制当前时间步的输入 通过候选记忆细胞 如何流⼊当前时间步的记忆细胞。如果遗忘门⼀直近似1且输入门⼀直近似0,过去的记忆细胞将⼀直通过时间保存并传递⾄当前时间步。这个设计可以应对循环神经⽹络中的梯度衰减问题,并更好地捕捉时间序列中时间步距离较⼤的依赖关系。

添加图片注释,不超过 140 字(可选)

5. 隐藏状态

有了记忆细胞以后,接下来我们还可以通过输出门来控制从记忆细胞到隐藏状态 的信息的流动:

添加图片注释,不超过 140 字(可选)

这⾥的tanh函数确保隐藏状态元素值在-1到1之间。需要注意的是,当输出门近似1时,记忆细胞信息将传递到隐藏状态供输出层使用;当输出门近似0时,记忆细胞信息只自己保留。下图展示了长短期记忆中隐藏状态的全部计算:

添加图片注释,不超过 140 字(可选)

6. LSTM与GRU的区别

LSTM与GRU二者结构十分相似,不同在于

  1. 新的记忆都是根据之前状态及输入进行计算,但是GRU中有一个重置门控制之前状态的进入量,而在LSTM里没有类似门;
  2. 产生新的状态方式不同,LSTM有两个不同的门,分别是遗忘门(forget gate)和输入门(input gate),而GRU只有一种更新门(update gate);
  3. LSTM对新产生的状态可以通过输出门(output gate)进行调节,而GRU对输出无任何调节。
  4. GRU的优点是这是个更加简单的模型,所以更容易创建一个更大的网络,而且它只有两个门,在计算性上也运行得更快,然后它可以扩大模型的规模。
  5. LSTM更加强大和灵活,因为它有三个门而不是两个。

7. LSTM可以使用别的激活函数吗?

关于激活函数的选取,在LSTM中,遗忘门、输入门和输出门使用Sigmoid函数作为激活函数;在生成候选记忆时,使用双曲正切函数Tanh作为激活函数。
值得注意的是,这两个激活函数都是饱和的,也就是说在输入达到一定值的情况下,输出就不会发生明显变化了。如果是用非饱和的激活函数,例如ReLU,那么将难以实现门控的效果。
Sigmoid函数的输出在0~1之间,符合门控的物理定义。且当输入较大或较小时,其输出会非常接近1或0,从而保证该门开或关。在生成候选记忆时,使用Tanh函数,是因为其输出在−1~1之间,这与大多数场景下特征分布是0中心的吻合。此外,Tanh函数在输入为0附近相比Sigmoid函数有更大的梯度,通常使模型收敛更快。
激活函数的选择也不是一成不变的,但要选择合理的激活函数。
一般来说,采用RNN训练时不推荐使用batch normalization方法解决过拟合问题

参考:

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

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

相关文章

CLion和Qt 联合开发环境配置教程(Windows和Linux版)

需要安装的工具CLion 和Qt CLion下载链接 :https://www.jetbrains.com.cn/clion/ 这个软件属于直接默认安装就行&#xff0c;很简单&#xff0c;不多做介绍了 Qt:https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/ window 直接点exe Linux 先c…

Python | Leetcode Python题解之第491题非递减子序列

题目&#xff1a; 题解&#xff1a; class Solution:def findSubsequences(self, nums: List[int]) -> List[List[int]]:def dfs(i, tmp):if i len(nums):if len(tmp) > 2:res.append(tmp[:]) # 拷贝&#xff0c;tmp[:]而非tmpreturn# 选 nums[i]if not tmp or nu…

我们可以用微服务创建状态机吗?

大家好&#xff0c;我是锋哥。今天分享关于【我们可以用微服务创建状态机吗&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; 我们可以用微服务创建状态机吗&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 是的&#xff0c;微服务架构可…

Java | Leetcode Java题解之第496题下一个更大元素I

题目&#xff1a; 题解&#xff1a; class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {Map<Integer, Integer> map new HashMap<Integer, Integer>();Deque<Integer> stack new ArrayDeque<Integer>();for (int i num…

19.面试算法-树的深度优先遍历(一)

1. 深入理解前中后序遍历 深度优先遍历有前中后三种情况&#xff0c;大部分人看过之后就能写出来&#xff0c;很遗憾大部分只是背下来的&#xff0c;稍微变换一下就废了。 我们再从二叉树的角度看递归&#xff0c;每次遇到递归&#xff0c;都按照前面说的四步来写&#xff0c…

STM32_实验3_控制RGB灯

HAL_Delay 是 STM32 HAL 库中的一个函数&#xff0c;用于在程序中产生一个指定时间的延迟。这个函数是基于系统滴答定时器&#xff08;SysTick&#xff09;来实现的&#xff0c;因此可以实现毫秒级的延迟。 void HAL_Delay(uint32_t Delay); 配置引脚&#xff1a; 点击 1 到 IO…

wordpress 子比主题美化 四宫格 多宫格 布局插件

wordpress 主题美化 四宫格 多宫格 布局插件&#xff08;只在子比主题上测试过&#xff0c;其它主题没测试&#xff09; A5资源网四宫格布局插件是一个功能丰富的WordPress插件,专为创建自适应的四宫格布局而设计。这个插件具有以下主要特点: 灵活的布局: 支持1到8个宫格的自定…

Apache Paimon Catalog

Paimon Catalog可以持久化元数据,当前支持两种类型的metastore: 文件系统(默认):将元数据和表文件存储在文件系统中。hive:在 hive metastore中存储元数据。用户可以直接从 Hive 访问表。2.2.1 文件系统 CREATE CATALOG fs_catalog WITH ( type = paimon, warehouse = h…

Yolo目标检测:实时性与准确性的完美结合

在目标检测领域&#xff0c;Yolo&#xff08;You Only Look Once&#xff09;算法无疑是一颗璀璨的明星。自2016年由Joseph Redmon等人提出以来&#xff0c;Yolo凭借其出色的实时性和准确性&#xff0c;迅速在多个应用场景中崭露头角。本文将详细介绍Yolo目标检测的基本原理、优…

资讯 | 财富通科技政务协同办公管理软件通过麒麟软件适配认证

2024年9月25日&#xff0c;财富通科技研发的政务协同办公管理软件成功通过中国国产操作系统麒麟软件的适配认证。本次认证是继公司区块链产品“基于区块链的企业及人员资质数字证书服务平台”认证以后得第二次认证。这一成就标志着财富通科技在推动国产软件生态建设方面迈出了坚…

虚拟现实与Facebook的结合:未来社交的全新体验

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术正在逐步改变人们的社交方式。Facebook&#xff0c;作为全球最大的社交媒体平台之一&#xff0c;积极探索如何将虚拟现实融入其社交生态系统&#xff0c;创造全新的用户体验。这一结合不仅影响了用户之间…

双十一买什么东西的人比较多?盘点2024双十一爆款好物分享

随着双十一的脚步渐近&#xff0c;各大电商平台已经开始了激烈的促销大战。作为一年中最盛大的购物节&#xff0c;双十一不仅吸引了无数消费者的热情参与&#xff0c;也成为了检验品牌和产品质量的最佳时刻。那么2024年双11买什么东西比较好呢&#xff1f;今天就给大家梳理一份…

2024最新IOS应用商店下载页源码 支持一键跳转设置双端app

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 支持apk&#xff0c;ipa&#xff0c;ios描述文件上传分发下载网站自适应PC手机自适应&#xff08;适配市面上主流手机&#xff0c;包括安卓和苹果&#xff09;支持引导用户正确使用浏…

Go:error处理机制

文章目录 本篇总结的是Go中对于错误的处理机制 Go 语言的函数经常使用两个返回值来表示执行是否成功&#xff1a;返回某个值以及 true 表示成功&#xff1b;返回零值&#xff08;或 nil&#xff09;和 false 表示失败 而实际上来说&#xff0c;是需要对于第二个参数进行判断的…

物流管理系统设计与实现

摘 要 本物流管理系统是针对目前物流管理系统管理的实际需求&#xff0c;从实际工作出发&#xff0c;对过去的物流管理系统管理系统存在的问题进行分析&#xff0c;结合计算机系统的结构、概念、模型、原理、方法&#xff0c;在计算机各种优势的情况下&#xff0c;采用目前jsp…

Cocos Creator导出obj文件用于后端寻路

Cocos Creator 3.8.0 用这个扩展插件 【杨宗宝】两年前写的网格工具&#xff0c;今天将它开源了。 - Creator 3.x - Cocos中文社区carlosyzy_extensions_mesh: Cocos Creator 3.x mesh插件&#xff0c;负责网格数据的导出。合并&#xff0c;拆封等一系列操作 (gitee.com) 下…

基于vue框架的的地铁站智慧管理系统的设计n09jb(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,上班打卡,下班打卡,人员管理,交接班,视频巡检,车辆巡检,车辆管理 开题报告内容 基于Vue框架的地铁站智慧管理系统的设计开题报告 一、研究背景与意义 随着城市化进程的加速&#xff0c;地铁站作为城市交通系统的重要组成部分&am…

C#学习笔记(九)

C#学习笔记&#xff08;九&#xff09; 第六章 面向对象编程&#xff08;一&#xff09;类与对象、字段与属性一、类与对象正确的理解1. 什么是类&#xff1f;2.什么是对象&#xff1f;3. 类与对象的区别 二、类的基本规范和对象使用1. 类的规范 三、类的访问修饰符&#xff08…

Jsoup在Java中:解析京东网站数据

对于电商网站如京东来说&#xff0c;其页面上的数据包含了丰富的商业洞察。对于开发者而言&#xff0c;能够从这些网站中提取有价值的信息&#xff0c;进行分析和应用&#xff0c;无疑是一项重要的技能。本文将介绍如何使用Java中的Jsoup库来解析京东网站的数据。 Jsoup简介 …

开源表单生成器OpnForm

什么是 OpnForm &#xff1f; OpnForm 是一个开源的表单构建工具&#xff0c;旨在简化创建自定义表单的过程&#xff0c;特别适合无编码知识的用户。它通过人工智能优化表单创建流程&#xff0c;支持多种用途&#xff0c;如联系人表单、调查表等。OpnForm 提供了一个直观的拖放…