Day15上 - RNN、LSTM、GRU、情感识别

【TensorFlow】RNN的用法汇总 一、单步的RNN:RnnCell 1、tf.contrib.rnn.BasicRnnCell:RNN的一个单元细胞定义 BasicRNNCell是最基本的RNN cell单元。 1)函数介绍 tf.contrib.rnn.BasicRnnCell(num_units,actication=None,reuse=None,name=None)输入参数: num_units:RNN层神经... 阅读详情

RNN,即循环神经网络(Recurrent Neural Network),是一种用于处理序列数据的神经网络。与传统的前馈神经网络不同,RNN具有内部的记忆机制,可以记住之前输入的信息,并将其用于当前输入的处理中。这使得RNN非常适合于处理和预测时间序列数据、自然语言处理、语音识别等任务。

整体来看,RNN有被取代的趋势,但RNN是理解大模型的核心,大模型里的很多理念都来源于RNN。学习RNN不是为了怎么使用,而是分析为何消亡,这样才能更深刻的理解 transformer为何活着, transformer是点对点解决RNN的问题。

RNN的基本结构

在RNN中,信息不仅沿着输入向量传播,还从一个步骤传递到下一个步骤。这意味着每个输出都依赖于之前的计算,并且所有计算都涉及相同的参数集。这种结构允许网络学习到序列中的模式,即使这些模式出现在不同的时间点上。

RNN的问题

  1. 梯度消失/爆炸问题:在训练深度RNN时,可能会遇到梯度消失或梯度爆炸的问题。这是因为通过时间的反向传播(BPTT)会将错误信号传回很多时间步长,导致权重更新变得非常小(消失)或非常大(爆炸)。这使得网络难以学习长期依赖关系。

  2. 无法有效捕捉长距离依赖:由于上述梯度问题,标准RNN在处理非常长的序列时可能表现不佳,尤其是在需要记住很久之前的信息时。

解决方案

为了克服这些问题,研究人员开发了多种改进的RNN模型:

  • 长短期记忆网络(LSTM, Long Short-Term Memory):LSTM是一种特殊的RNN类型,它能够学习长期依赖关系。LSTM通过引入“门”的概念来控制信息流,包括遗忘门、输入门和输出门,从而有效地解决了梯度消失问题。

  • 门控循环单元(GRU, Gated Recurrent Unit):GRU是另一种改进型RNN,它简化了LSTM的设计,将遗忘门和输入门合并为更新门,并且没有单独的输出门。尽管结构更简单,但在许多任务中,GRU的表现与LSTM相当,有时甚至更好。

  • 双向RNN(BiRNN, Bidirectional RNN):BiRNN由两个RNN组成,一个处理正向的时间序列,另一个处理反向的时间序列。这允许网络同时考虑过去和未来的信息,对于某些任务来说是非常有用的。

  • 深度RNN:通过堆叠多个RNN层,可以创建深度RNN,以提高模型的能力。然而,这也增加了模型的复杂性和计算需求。

RNN的使用

1. RNN 要解决什么问题?

  • 时序信号的抽取特征
  • 顺序

2. RNN 的解决方法

  • 循环
  • 逐个处理
  • 前后依赖
    • 后一项直接依赖前一项,间接依赖前面所有的项
    • 前后进行【手递手】传递
  • 中间隐藏状态

3. RNN API 如何调用?

  • nn.RNN
    • 自动挡(自动循环)
    • 用于编码器
  • nn.RNNCell
    • 手动挡(手动循环)
    • 用于解码器

时序共享,每一步用的是同一个A;进来多少步就出去多少步,即(X)进来70步,出去的(h)也是70步。hn是最后一步,最后一步很重要,我们经常用最后一步去解决很多问题。因为理论上所有步的信息都聚合到了最后一步上。h0也需要写上,因为解码自回归的时候需要。

所有的网络都是在处理特征,这是人工智能的核心问题,不论是全链接、卷积、RNN循环和transformer,它们都是在处理特征,所以我们只关心特征的维度。

import torch
from torch import nn

"""
1. Simple RNN
"""

"""
    时序类数据结构:[seq_len, batch_size, embedding_dim]
    seq_len:序列长度
    batch_size:批量数据有多少个
    embedding_dim:嵌入维度,也就是每个词是多大的向量
"""
# 比如一个短信70个字,3个短信,每个字是256个维度
X = torch.randn(70, 3, 256)
h0 = torch.zeros(1, 3, 512, dtype=torch.float32)
X.shape, h0.shape

# 构建一个循环神经网络,输入层维度256,隐藏层维度512
rnn = nn.RNN(input_size=256, hidden_size=512)

# 调用RNN
out, hn = rnn(X, h0)

# [seq_len, batch_size, hidden_size]
out.shape

# [1, batch_size, hidden_size]
hn.shape

 LSTM 博客

        http://colah.github.io/posts/2015-08-Understanding-LSTMs/

        

当序列很长时,前面的都忘了,所以增加一个能够记忆的东西,这就有了LSTM。

"""
2、 LSTM 长短期记忆网络
    Long 长
    Short 短
    Term 期
    Memory 记忆
"""

"""
    导入必要的模块
    导入 PyTorch 库及其神经网络模块 nn
"""
import torch
from torch import nn

"""
(1)定义 LSTM 层
"""
# Inputs: input, (h_0, c_0)
# Outputs: output, (h_n, c_n)
# 创建一个 LSTM 层,输入维度为 256,隐藏层维度为 512
lstm = nn.LSTM(input_size=256, hidden_size=512)


"""
(2)准备输入数据和初始状态
"""
# 准备输入数据(70个时间步,每个时间步有3个样本,每个样本的特征维度为256)
X = torch.randn(70, 3, 256)
# 初始化隐藏状态h0和细胞状态c0,1个LSTM层,3个样本,每个样本的隐藏状态维度为512
h0 = torch.zeros(1, 3, 512, dtype=torch.float32)
c0 = torch.zeros(1, 3, 512, dtype=torch.float32)

"""
(3)前向传播
"""
#out是LSTM的输出,hn是最后一个时间步的隐藏状态,cn是最后一个时间步的细胞状态
out, (hn, cn) = lstm(X, (h0, c0))

"""
(4)检查输出的形状
"""
# [70, 3, 512]
out.shape

# [1, 3, 512]
hn.shape

# [1, 3, 512]
cn.shape

"""
(1)定义 LSTMCell 层
"""
# Inputs: input, (h_0, c_0)
# Outputs: (h_1, c_1)
#创建一个 LSTMCell 层,输入维度为 256,隐藏层维度为 512
lstm_cell = nn.LSTMCell(input_size=256, hidden_size=512)

"""
(2)准备输入数据和初始状态
"""
# 准备输入数据
X = torch.randn(70, 3, 256)
# 初始化隐藏状态 h0 和细胞状态 c0
h0 = torch.zeros(3, 512, dtype=torch.float32)
c0 = torch.zeros(3, 512, dtype=torch.float32)

"""
(3)处理第一个时间步的数据
"""
X0 = X[0, :, :]
X0.shape

"""
(4)前向传播
"""
hn, cn = lstm_cell(X0, (h0, c0))

"""
(5)检查输出的形状
"""
hn.shape
cn.shape
X.size(0)

"""
(6)循环处理所有时间步的数据
"""
out = []
for x in X:
    h0, c0 = lstm_cell(x, (h0, c0))
    out.append(h0)

"""
(7)拼接所有时间步的输出
"""
# 最终所有步的短期状态
out = torch.stack(tensors=out, dim=0)

"""
(8)获取最后一步的状态
"""
hn = h0
cn = c0

"""
总结:
    LSTM 层:处理整个序列数据,返回所有时间步的输出和最后一个时间步的隐藏状态及细胞状态。
    LSTMCell 层:逐个时间步处理数据,返回每个时间步的隐藏状态和细胞状态。
"""

信息

  • CRUD工程师
    • 增删改查
    • Create(创建):向数据库中添加新的记录或数据项。
    • Read(读取):检索或查询数据库中的现有数据。这可以是获取单个记录、一组记录或者执行复杂的查询以获取特定的数据视图。
    • Update(更新):修改数据库中已有的记录。这可能涉及更改单个字段的值或多个字段的值。
    • Delete(删除):从数据库中移除记录。请注意,删除操作通常是不可逆的,因此在执行删除操作之前应该谨慎考虑,并且在某些情况下,可能会有逻辑删除(例如,设置一个“已删除”标志)而不是物理删除。
  • LSTM
    • 1. 门控思想
    • 2. CRUD思想
      • (1)遗忘门:先丢掉一部分不重要信息
      • (2)输入门:增加重要的信息
  • GRU
    • 核心思想:吃 LSTM 的红利,化简 LSTM
    • 调用层面:跟Simple RNN是一样的

情感识别 sentiment analysis

1. 业务本质:

2. 技术本质:
  • 文本分类
3. 流程:

"""
    需求:酒店评论分析
"""

"""
1. 样本路径和类别读取
"""
"""
    训练数据聚合
"""
import os
train_root = os.path.join("hotel", "train")
train_texts = []
train_labels = []
for label in os.listdir(train_root):
    label_root = os.path.join(train_root, label)
    for file in os.listdir(label_root):
        file_path = os.path.join(label_root, file)
        # 聚合结果
        train_texts.append(file_path)
        train_labels.append(label)
# 打印数据
len(train_texts), len(train_labels)


"""
    测试数据聚合
"""
test_root = os.path.join("hotel","test")
test_texts = []
test_labels = []
for label in os.listdir(test_root):
    label_root = os.path.join(test_root,label)

    if os.path.isdir(label_root):
        for file in os.listdir(label_root):
            file_path = os.path.join(label_root,file)
            test_texts.append(file_path)
            test_labels.append(label)
    else:
        print(f"跳过非目录项:{label_root}")

# 打印数据
len(test_texts),len(test_labels)

"""
2. 构建分词器
    分词,把句子变 token
    把所有不同的token聚在一起
    做 0 ~ N-1 的编码
"""
SEQ_LEN = 30

import jieba
# pip install opencc -U
import opencc

class Tokenizer(object):
    """
        定义一个分词器
    """
    def __init__(self, X, y):
        """
            训练的语料
        """
        self.X = X
        self.y = y
        self.t2s = opencc.OpenCC(config="t2s")
        self._build_dict()

    def _build_dict(self):
        """
            构建字典
        """
        # 1. 获取所有的 token
        words = {"<PAD>", "<UNK>"}
        for file in self.X:
            # 打开文件
            with open(file=file, mode="r", encoding="gbk", errors="ignore") as f:
                text = f.read().replace("\n", "")
                text = self.t2s.convert(text=text)
                words.update(set(jieba.lcut(text)))
        # 2. 构建文本字典
        self.word2idx = {word: idx for idx, word in enumerate(words)}
        self.idx2word = {idx: word for word, idx in self.word2idx.items()}
        # 3. 删掉 数据集
        del self.X
        # 4. 构建标签字典
        labels = set(train_labels)
        self.label2idx = {label: idx for idx, label in enumerate(labels)}
        self.idx2label = {idx: label for label, idx in self.label2idx.items()}
        # 5. 删除 数据集
        del self.y
        

    def encode(self, text, seq_len=SEQ_LEN):
        """
            text --> tokens --> ids

            自我扩展:
                - 右侧截断或填充
                - 左边?
                - 随机?
        """
        # 1. 繁体转简体
        text = text.replace("\n", "")
        text = self.t2s.convert(text=text)
        # 2. 分词
        text = jieba.lcut(text)
        # 3. 统一长度
        text = (text + ["<PAD>"] * seq_len)[:seq_len]
        # 4. 转 id
        ids = [self.word2idx.get(word, self.word2idx.get("<UNK>")) for word in text]
        
        return ids
        
    def decode(self, ids):
        """
            ids --> tokens --> text
        """
        text = "".join([self.idx2word.get(_id, "") for _id in ids])
        return text

    def __str__(self):
        """
            输: 分词器基本信息
        """
        return f"""
        Tokenizer Info: 
            --> Num of Tokens: {len(self.word2idx)}
            --> Num of Labels: {len(self.label2idx)}
        """
    def __repr__(self):
        return self.__str__()

输出结果: 

"""
3. 打包数据
"""
from torch.utils.data import Dataset
from torch.utils.data import DataLoader
import torch

class HotelCommentDataset(Dataset):
    """
        自定义数据集
    """
    def __init__(self, X, y, seq_len=SEQ_LEN):
        """
            初始化
        """
        self.X = X
        self.y = y
        self.seq_len = seq_len

    def __getitem__(self, idx):
        """
            索引操作
                返回第idx个样本
        """
        # 1. 文本
        file = self.X[idx]
        with open(file=file, mode="r", encoding="gbk", errors="ignore") as f:
            text = f.read()
            ids = tokenizer.encode(text=text, seq_len=self.seq_len)
            ids = torch.tensor(data=ids, dtype=torch.long)
                
        # 2. 标签
        label = self.y[idx]
        label = tokenizer.label2idx.get(label)
        label = torch.tensor(data=label, dtype=torch.long)
        
        return ids, label

    def __len__(self):
        return len(self.X)

# 1. 定义一个分词器
tokenizer = Tokenizer(X=train_texts, y=train_labels)
tokenizer

# 打包数据
train_dataset = HotelCommentDataset(X=train_texts, y=train_labels)
train_dataloader = DataLoader(dataset=train_dataset, shuffle=True, batch_size=128)
test_dataset = HotelCommentDataset(X=test_texts, y=test_labels)
test_dataloader = DataLoader(dataset=test_dataset, shuffle=False, batch_size=256)

for X, y in test_dataloader:
    print(X.shape)
    print(y.shape)
    break

"""
4. 搭建模型
"""
import torch
from torch import nn

"""
    每句话65个词,分为2类
    
"""
class TextCNN(nn.Module):
    """
        搭建模型
            - 卷积
            # [N, C, L]
            nn.Conv1d()
    """
    def __init__(self, dict_len=len(tokenizer.word2idx), embedding_dim = 256):
        super().__init__()
        # 向量化
        self.embed = nn.Embedding(num_embeddings=dict_len, 
                                  embedding_dim=embedding_dim, 
                                  padding_idx=tokenizer.word2idx.get("<PAD>"))
        # 特征抽取
        self.feature_extractor = nn.Sequential(
            nn.Conv1d(in_channels=256, out_channels=512, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm1d(num_features=512),
            nn.ReLU(),
            nn.MaxPool1d(kernel_size=2, stride=2, padding=0),
            nn.Conv1d(in_channels=512, out_channels=1024, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm1d(num_features=1024),
            nn.ReLU(),
            nn.MaxPool1d(kernel_size=2, stride=2, padding=0)
        )
        # 分类
        self.classifier = nn.Sequential(
            nn.Flatten(),
            nn.Linear(in_features=1024 * (SEQ_LEN // 2 // 2), out_features=128),
            nn.ReLU(),
            nn.Linear(in_features=128, out_features=2)
        )
        
        
    def forward(self, x):
        # 向量化
        x = self.embed(x)
        x = torch.permute(input=x, dims=(0, 2, 1))
        # 抽特征
        x = self.feature_extractor(x)
        # 做分类
        x = self.classifier(x)
        return x

class TextRNN(nn.Module):
    """
        搭建模型
            - 卷积
            # [N, C, L]
            nn.Conv1d()
    """
    def __init__(self, dict_len=len(tokenizer.word2idx), embedding_dim = 256):
        super().__init__()
        # 向量化
        self.embed = nn.Embedding(num_embeddings=dict_len, 
                                  embedding_dim=embedding_dim, 
                                  padding_idx=tokenizer.word2idx.get("<PAD>"))
        # 特征抽取
        self.feature_extractor = nn.RNN(input_size=256, hidden_size=512, num_layers=1, bidirectional=False)
        # 分类
        self.classifier = nn.Sequential(
            nn.Linear(in_features=512, out_features=128),
            nn.ReLU(),
            nn.Linear(in_features=128, out_features=2)
        )
        
    def forward(self, x):
        # 向量化
        x = self.embed(x)
        x = torch.permute(input=x, dims=(1, 0, 2))
        # 特征抽取
        out, hn = self.feature_extractor(x)
        # 分类输出
        x = self.classifier(out.sum(dim=0))
        return x

model= TextRNN()
for X, y in train_dataloader:
    y_pred = model(X)
    print(y_pred.shape)
    break
"""
5. 训练模型
"""
# 检测设备
device = "cuda" if torch.cuda.is_available() else "cpu"
# 实例化模型
model = TextRNN().to(device=device)
# 损失函数
loss_fn = nn.CrossEntropyLoss()
# 优化器
optimizer = torch.optim.Adam(params=model.parameters(), lr=1e-3)
# 轮次
epochs = 20

"""
    6. 评估
"""
import time

def get_acc(dataloader):
    model.eval()
    accs = []
    with torch.no_grad():
        for X, y in dataloader:
            # 0. 数据搬家
            X = X.to(device=device)
            y = y.to(device=device)
            # 1. 正向传播
            y_pred = model(X)
            # 2. 计算结果
            y_pred = y_pred.argmax(dim=1)
            # 3. 计算准确率
            acc = (y_pred == y).to(dtype=torch.float32).mean().item()
            # 4. 保存结果
            accs.append(acc)
    final_acc = round(number=sum(accs) / len(accs), ndigits=6)
    return final_acc

def train():
    train_acc = get_acc(dataloader=train_dataloader)
    test_acc = get_acc(dataloader=test_dataloader)
    print(f"初始 Train_acc: {train_acc}, Test_acc: {test_acc}")
    
    for epoch in range(epochs):
        model.train()
        start_time = time.time()
        for X, y in train_dataloader:
            # 0. 数据搬家
            X = X.to(device=device)
            y = y.to(device=device)
            # 1. 正向传播
            y_pred = model(X)
            # 2. 计算误差
            loss = loss_fn(y_pred, y)
            # 3. 反向传播
            loss.backward()
            # 4. 优化一步
            optimizer.step()
            # 5. 清空梯度
            optimizer.zero_grad()
        
        stop_time = time.time()
        # 每轮结束后测试一下
        train_acc = get_acc(dataloader=train_dataloader)
        test_acc = get_acc(dataloader=test_dataloader)
        
        print(f"Epoch: {epoch + 1}, Train_acc: {train_acc}, Test_acc: {test_acc}, Train_time: {stop_time-start_time}")

train()

使用TensorFlow实现RNN模型入门篇1 最近在看RNN模型,为简单起见,本篇就以简单的二进制序列作为训练数据,而不实现具体的论文仿真,主要目的是理解RNN的原理和如何在TensorFlow中构造一个简单基础的模型架构。其中代码参考了这篇博客。数据集首先我们看一下实验数据的构造:输入数据X:在时间t,Xt的值有50%的概率为1,50%的概率为0; 输出数据Y:在实践t,Yt的值有50%的概率为1,50%的概率为0,除此之外,如果`Xt-3 阅读详情

相关推荐

用于文本分类的RNN-Attention网络

这篇博客主要介绍Attention机制在文本分类任务上的作用,原理以及附带的代码实现。

thriving_fcl的博客 3万+

【人工智能】探索自然语言处理中的语音识别技术:基于Recurrent Neural Networks (RNN) 和长短期记忆网络(LSTM)模型的深入剖析

语音识别作为自然语言处理中的一项核心任务,近年来取得了长足的进展,尤其是在深度学习技术的推动下。在语音识别任务中,Recurrent Neural Networks (RNN) 尤其是其变体——长短期记忆网络(LSTM),展现出了卓越的性能。本文从语音识别的基本概念出发,详细介绍了RNN和LSTM的基础结构及其在语音识别中的应用。通过分析其工作原理、优缺点及其在处理长序列输入时的表现,本文还探讨了LSTM如何解决传统RNN在处理长期依赖问题时的局限性。文章通过理论和实际应用案例,进一步展示了LSTM如何在现

一个被知识诅咒的人 2178

30.RNN应用

应用 循环神经网络有很多种应用情景。 1.Many to one ①语义分析里面,输入是一个vector序列,输出为一个vector ②关键词提取 2.Many to many ①语音辨识里面会有一个问题,比如你说好棒,它可能识别很多“好”和“棒” 所以我们需要用CTC的方法来解决 ...

xjtuse123的博客 2670

在 TensorFlow 上使用 LSTM 进行情感分析

你可以从 Github 上面下载到所有的源代码。 在这篇教程中,我们将介绍如何将深度学习技术应用到情感分析中。该任务可以被认为是从一个句子,一段话,或者是从一个文档中,将作者的情感分为积极的,消极的或者中性的。 这篇教程由多个主题组成,包括词向量,循环神经网络和 LSTM。在了解...

chuange6363的博客 1103

语音情感识别研究的深入探索

在现代科技快速发展的今天,人机交互已经成为了日常生活中不可或缺的一部分。情感识别技术,作为人工智能领域的研究热点,主要致力于赋予计算机识别人类情感状态的能力,从而使得机器能够更加人性化地与人类进行交流。在这一章中,我们将探索情感识别的基础知识、技术和应用场景。情感识别技术的核心在于能够准确地从语音、面部表情、文本等多种渠道捕获人类的情绪信号,并分析这些信号所表达的情感内容。通过理解人类的情绪,机器可以更好地适应用户的需求,实现更加流畅和自然的交互体验。

weixin_34620658的博客 932

基于神经网络的语音情感识别

基于神经网络的语音情感识别

循环神经网络(RNN)简介与应用

循环神经网络(Recurrent Neural Networks,简称RNN)是深度学习中用于处理序列数据的一类神经网络。本文将介绍RNN的基本概念、原理、以及在不同领域的应用,并附带一些具体的代码实例,以便更好地理解和应用这一强大的序列模型。

是我的博客 5092

String+CytoScape构建PPI网络

1.下载CytoScape Cytoscape是一款专业强大好用的物生信息分析软件,主要达用于专业的研究人员使用,软件主要适用于整合模块化网络和生物科学联系网络图的绘制,支持多种文件格式,导入后就可以直接进行编辑或者分析等操作了,除此之外,软件还提供了强大的编辑工具,支持添加相应的注释信息,软件基于java环境组件打造。 下载地址:https://cytoscape.org/ 因为软件基于java...

xiaobai1_1的博客 1万+

深入解析RNN神经网络原理与应用

循环神经网络(RNN)是一种适用于序列数据建模的神经网络,具有处理时序信息的能力。摘要如下: RNN通过引入隐藏状态传递机制,能够记忆历史信息并应用于当前时刻的计算,使其擅长处理语音识别、情感分类、机器翻译等序列任务。其核心结构包含输入层、隐藏层和输出层,通过权重共享减少参数数量。RNN与全连接神经网络的关键区别在于能够利用前序时刻的输出信息。输入数据通常经过词向量表示(如one-hot编码),输出采用SoftMax计算概率分布。前向传播过程通过矩阵运算实现时序信息的传递和处理,使模型能够有效学习序列数据中

2301_79797055的博客 1143

KUKA机器人编程实战:5分钟搞定组输入与组输出的信号配置(附代码示例)

本文详细介绍了KUKA机器人编程中组输入与组输出的信号配置方法,通过5分钟快速掌握核心技巧。文章包含信号声明语法、典型配置流程及高级应用技巧,并附有代码示例,帮助工程师高效实现机器人与外部设备的通信。

efc123456的博客 851

电源完整性之仿真设计原理

电源完整性(Power Integrity),简称为PI,也就是大家平常听说的PI。PCB板上的电源设计也是非常重要的,不当的设计也会引起很重要的影响。所以电源完整性PI和信号完整性SI,是我们互连设计人员应该同等重视的问题。今天整理本人接触的电源完整性PI的一些原理,从不的角度去看PI,会有不同的理解,下面开始喽!!! 提到互连的电源设计,可能首先想到的电源分配网络(Power Distribution Nets),因为互连电源会有许多种,直流DC和交流AC,还有不同的电压调节模块(VRM)与不同的负载端

刘小同学的博客 7373

Python 循环神经网络(RNN)算法详解与应用案例

本文详细介绍了循环神经网络(RNN)的基本原理,提供了Python中的面向对象实现,并通过序列预测和文本生成的案例展示了RNN的应用。RNN在处理时间序列和自然语言等领域表现出色,但也面临梯度消失等挑战。希望本文能帮助读者理解RNN的基本概念和实现方法,为进一步研究和应用提供基础。

闲人编程的博客 5267

GD32单片机开发环境搭建(Keil5安装)

1.安装MDK5 由于GD32 Keil 版本例程的工程是基于Keil MDK-ARM 5.25 uVision5 创建的,所以我在此也安装MDK5.25版本。 下载链接:https://pan.baidu.com/s/1E4tcDQvsVl0xezU3pEyJTA 提取码:s1fr 其他版本下载链接:https://cloud.tencent.com/developer/article/1605195 选择安装路径(不要装到中文路径下,避免不必要的麻烦): 用户信息随便...

fangye945a的博客 3万+

【NLP理论到实战】10 循环神经网络理论知识

文章目录循环神经网络目标1. 循环神经网络的介绍2. LSTM和GRU2.1 LSTM的基础介绍2.2 LSTM的核心2.3 逐步理解LSTM2.3.1 遗忘门2.3.2 输入门2.3.3 输出门2.4 GRU,LSTM的变形3. 双向LSTM 循环神经网络 目标 能够说出循环神经网络的概念和作用 能够说出循环神经网络的类型和应用场景 能够说出LSTM的作用和原理 能够说出GRU的作用和原理 1. 循环神经网络的介绍 为什么有了神经网络还需要有循环神经网络? 在普通的神经网络中,信息的传递是单向

edc3001的博客 741

题解:AcWing 6051 看病

等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。但医院的排队不同其他排队,因为多数情况下,需要病情严重的人优先看病,所以希望BSNY设计系统时,以病情的严重情况作为优先级,判断接下来谁可以去看病。具体是这样的,最近来医院看病的人越来越多了,因此很多人要排队,只有当空闲时放一批病人看病。的操作,输出此时还在排队人中,优先级最大的患者姓名和优先级。后面没有输入,但需要你输出。

团爸讲算法 589

YOLOv8【第一章:基础入门篇·第2节】一文搞定,数据集制作与标注完全指南!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏,该专栏专注于分享我在YOLOv8目标检测模型中的实战经验,涵盖从入门基础到深度优化的全方位解决方案。无论你是计算机视觉的新手,还是具有多年深度学习经验的专家,本专栏都将为你提供高效、可复现的技术方案,助你掌握YOLOv8的核心技术,提升目标检测性能,突破瓶颈,优化模型,并加速项目开发🚀!

**My Coding Family** 1506

从零开始实现神经网络(三)_RNN循环神经网络

Python 中从头开始(仅使用。

ourkix的博客 1985

jira的详细使用教程

​jira的详细使用教程,1,Jira- 是一款缺陷管理软件工具,用其进行缺陷的管理和跟踪。(是B/S架构的软件) 2,主要涉及的角色: 3,具体工作流 添加工作流 1.点击项目设置

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 3295

12-TensorFlow RNN的简单使用

1.RNN概念 RNN: 借助循环核(cell)提取特征后,送入后续网络(如全连接网络 Dense) 进行预测等操作。RNN 借助循环核从时间维度提取信息,循环核参数时间共享。 1.循环核 循环核具有记忆力,通过不同时刻的参数共享,实现了对时间序列的信息提取。每个循环核有多个记忆体,对应图 1.2.1 中的多个小圆柱。记忆体内存储着每个时刻的状态信息ℎ𝑡,这里h𝑡 = tanh( 𝑥𝑡𝑤𝑥ℎ+ℎ𝑡−1wℎℎ + 𝑏ℎ)。其中,𝑤𝑥ℎ、wℎℎ 为权重矩阵,𝑏ℎ为偏置,𝑥𝑡为当前时刻的输入特征,ℎ𝑡−1为记忆

鸣鼓ming的博客 1831

AI赋能合同审查:构建租赁合同智能审核系统的全流程解析

在商业地产、设备租赁等场景中,合同审核效率直接影响业务流转速度。传统人工审核存在三大痛点:审核周期长(平均2-3个工作日)、合规风险高(条款遗漏率约15%)、人力成本居高不下。智能审核系统可将审核时间压缩至秒级,风险识别准确率提升至98%以上。

理论都是虚的,代码才是王道。 1356

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

语音情感识别--RNN

1. 背景与简介1.1. 现状计算机只能识别“说了什么”,无法识别“谁说的”、“怎样说”。1.2. 目标关注“怎样说”,识别说话者的情感。1.3. 困难(1)一句话的情感是什么因人而异,因此很难定义某句话的情感是什么;(2)经常会遇到的情况是,整句话没什么情感,但中间几个词带有情感。1.4. 工作(1)在语音情感识别中应用了CTC损失函数,从而可以识别一个较长的包含有情感的部分和没有情感部分的ut...

q6q6q的专栏 2256

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

rnn中文语音识别java_使用MFCC和RNN的简单语音识别

Post Views:4,213去年研究了一段时间的语音识别,出于一些功耗的考虑,主要精力还是放在了Spinx这个传统方法的实现上。HMM方法的局限性还是挺明显的,如今语音识别的先进技术基本都是基于DNN的。而RNN更是非常适合语音这种序列的处理。前面在github上偶然发现了一个语音识别的学习项目,里面提供了一些标定过的语音数据,同时也实现了一些demo性质的代码。不过,这个项目作者对Tenso...

weixin_42509815的博客 1419

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

循环神经网络(RNN)原理以及实战

一. RNN的网络结构及原理 二. RNN的改进 2.1.双向RNN 2.2. 深层双向RNN 五. Pyramidal RNN 六.RNN的训练-BPTT 七.RNN与CNN的结合应用:看图说话 八.RNN项目练手 一. RNN的网络结构及原理 一般的神经网络应该有的结构如下图所示: 图一 神经网络结构 既然我们已经有了人工神经网络和卷积神经网络,为什么还要...

不忘初心~ 1万+

RNN 怎么用?给初学者的小教程

 RNN 怎么用?给初学者的小教程 机器之心 Synced 08月14日 18:06 RNN 深度学习 机器翻译 分类 :互联网 阅读:559 抢沙发 . 什么是循环神经网络(RNN),如何使用它们?本文所讨论的就是关于循环神经网络的基础内容,RNN 是变得日益流行的深度学习模型。本文不打算深入讲解其晦涩的数学

周红伟讲AI 2032

RNN的学习和使用

思想就是:“温故而知新”。网络会对前面的信息进行定义并应用到当前输出的计算中,即隐藏层之间的节点不再无连接而是有链接的。正因为一部分输出结果会作为输入的一部分重新输入,使得RNN具有一定的记忆性。 1.识别验证码 # -*- coding: utf-8 -*- from __future__ import division, print_function, absolute_import ...

不忘初心,护天下安全! 745

6 款电商 AI 图片生成软件实测|国内 + 跨境卖家工具清单

电商 AI 作图工具已经从 "能不能用" 进入了 "好不好用" 的阶段。对于绝大多数卖家而言,现在的 AI 工具已经可以覆盖 60%-80% 的基础商品图需求,显著降低拍摄和设计成本。选择工具的核心逻辑不是 "哪款最强",而是 "哪款最适配你的品类、平台规模和团队能力"。垂直电商工具胜在工作流效率,通用生图工具强在创意上限,模板类工具赢在上手速度。建议根据自身业务阶段,搭配 1-2 款主力工具 + 1 款辅助工具,形成适合自己的视觉生产流程。

Mardi_Ladin的博客 362
上一篇: Day14 - CV项目实战:SAR飞机检测识别
下一篇: AI大模型(一):Prompt & AI编程
CSBLOG
博客等级 码龄2年 529粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值