[自然语言处理]RNN

1 传统RNN模型与LSTM

import torch
import torch.nn as nn

torch.manual_seed(6)


# todo:基础RNN模型
def dem01():
    '''
    参数1:input_size 每个词的词向量维度(输入层神经元的个数)
    参数2:hidden_size 隐藏层神经元的个数
    参数3:hidden_layer 隐藏层的层数
    '''
    rnn = nn.RNN(5, 6, 1)
    '''
    参数1:sequence_length 每个样本的句子长度
    参数2:batch_size 每个批次的样本数量
    参数3:input_size 每个词的词向量维度(输入层神经元的个数)
    '''
    input = torch.randn(1, 3, 5)
    '''
    参数1:hidden_layer 隐藏层的层数
    参数2:batch_size 每个批次的样本数量
    参数3:hidden_size 隐藏层神经元的个数
    '''
    h0 = torch.randn(1, 3, 6)
    output, hn = rnn(input, h0)
    print(f'output {output}')
    print(f'hn {hn}')
    print(f'RNN模型 {rnn}')


# todo:增加输入的sequence_length
def dem02():
    '''
    参数1:input_size 每个词的词向量维度(输入层神经元的个数)
    参数2:hidden_size 隐藏层神经元的个数
    参数3:hidden_layer 隐藏层的层数
    '''
    rnn = nn.RNN(5, 6, 1)
    '''
    参数1:sequence_length 每个样本的句子长度
    参数2:batch_size 每个批次的样本数量
    参数3:input_size 每个词的词向量维度(输入层神经元的个数)
    '''
    input = torch.randn(4, 3, 5)
    '''
    参数1:hidden_layer 隐藏层的层数
    参数2:batch_size 每个批次的样本数量
    参数3:hidden_size 隐藏层神经元的个数
    '''
    h0 = torch.randn(1, 3, 6)
    output, hn = rnn(input, h0)
    print(f'output {output}')
    print(f'hn {hn}')
    print(f'RNN模型 {rnn}')


# todo:增加隐藏层的个数
def dem03():
    '''
    参数1:input_size 每个词的词向量维度(输入层神经元的个数)
    参数2:hidden_size 隐藏层神经元的个数
    参数3:hidden_layer 隐藏层的层数
    '''
    rnn = nn.RNN(5, 6, 2)
    '''
    参数1:sequence_length 每个样本的句子长度
    参数2:batch_size 每个批次的样本数量
    参数3:input_size 每个词的词向量维度(输入层神经元的个数)
    '''
    input = torch.randn(4, 3, 5)
    '''
    参数1:hidden_layer 隐藏层的层数
    参数2:batch_size 每个批次的样本数量
    参数3:hidden_size 隐藏层神经元的个数
    '''
    h0 = torch.randn(2, 3, 6)
    output, hn = rnn(input, h0)
    print(f'output {output}')
    print(f'hn {hn}')
    print(f'RNN模型 {rnn}')


# todo:一个一个地向模型输入单词-全零初始化
def dem04_1():
    '''
    参数1:input_size 每个词的词向量维度(输入层神经元的个数)
    参数2:hidden_size 隐藏层神经元的个数
    参数3:hidden_layer 隐藏层的层数
    '''
    rnn = nn.RNN(5, 6, 1)
    '''
    参数1:sequence_length 每个样本的句子长度
    参数2:batch_size 每个批次的样本数量
    参数3:input_size 每个词的词向量维度(输入层神经元的个数)
    '''
    input = torch.randn(4, 1, 5)
    print(f'input {input}')
    '''
    参数1:hidden_layer 隐藏层的层数
    参数2:batch_size 每个批次的样本数量
    参数3:hidden_size 隐藏层神经元的个数
    '''
    # 每个样本一次性输入神经网络
    hn = torch.zeros(1, 1, 6)
    print(f'hn1 {hn}')
    output, hn = rnn(input, hn)
    print(f'output1 {output}')
    print(f'hn1 {hn}')
    print(f'RNN模型1 {rnn}')
    print('*' * 80)
    # 每个样本逐词送入神经网络
    hn = torch.zeros(1, 1, 6)
    print(f'hn2 {hn}')
    for i in range(4):
        tmp = input[i][0]
        print(f'tmp.shape {tmp.shape}')
        output, hn = rnn(tmp.unsqueeze(0).unsqueeze(0), hn)
        print(f'{i}-output {output}')
        print(f'{i}-hn {hn}')


# todo:一个一个地向模型输入单词-全一初始化
def dem04_2():
    '''
    参数1:input_size 每个词的词向量维度(输入层神经元的个数)
    参数2:hidden_size 隐藏层神经元的个数
    参数3:hidden_layer 隐藏层的层数
    '''
    rnn = nn.RNN(5, 6, 1)
    '''
    参数1:sequence_length 每个样本的句子长度
    参数2:batch_size 每个批次的样本数量
    参数3:input_size 每个词的词向量维度(输入层神经元的个数)
    '''
    input = torch.randn(4, 1, 5)
    print(f'input {input}')
    '''
    参数1:hidden_layer 隐藏层的层数
    参数2:batch_size 每个批次的样本数量
    参数3:hidden_size 隐藏层神经元的个数
    '''
    # 每个样本一次性输入神经网络
    hn = torch.ones(1, 1, 6)
    print(f'hn1 {hn}')
    output, hn = rnn(input, hn)
    print(f'output1 {output}')
    print(f'hn1 {hn}')
    print(f'RNN模型1 {rnn}')
    print('*' * 80)
    # 每个样本逐词送入神经网络
    hn = torch.ones(1, 1, 6)
    print(f'hn2 {hn}')
    for i in range(4):
        tmp = input[i][0]
        print(f'tmp.shape {tmp.shape}')
        output, hn = rnn(tmp.unsqueeze(0).unsqueeze(0), hn)
        print(f'{i}-output {output}')
        print(f'{i}-hn {hn}')


# todo:一个一个地向模型输入单词-随机初始化
def dem04_3():
    '''
    参数1:input_size 每个词的词向量维度(输入层神经元的个数)
    参数2:hidden_size 隐藏层神经元的个数
    参数3:hidden_layer 隐藏层的层数
    '''
    rnn = nn.RNN(5, 6, 1)
    '''
    参数1:sequence_length 每个样本的句子长度
    参数2:batch_size 每个批次的样本数量
    参数3:input_size 每个词的词向量维度(输入层神经元的个数)
    '''
    input = torch.randn(4, 1, 5)
    print(f'input {input}')
    '''
    参数1:hidden_layer 隐藏层的层数
    参数2:batch_size 每个批次的样本数量
    参数3:hidden_size 隐藏层神经元的个数
    '''
    # 每个样本一次性输入神经网络
    hn = torch.randn(1, 1, 6)
    print(f'hn1 {hn}')
    output, hn = rnn(input, hn)
    print(f'output1 {output}')
    print(f'hn1 {hn}')
    print(f'RNN模型1 {rnn}')
    print('*' * 80)
    # 每个样本逐词送入神经网络
    hn = torch.randn(1, 1, 6)
    print(f'hn2 {hn}')
    for i in range(4):
        tmp = input[i][0]
        print(f'tmp.shape {tmp.shape}')
        output, hn = rnn(tmp.unsqueeze(0).unsqueeze(0), hn)
        print(f'{i}-output {output}')
        print(f'{i}-hn {hn}')


# todo:设置batch_first=True
def dem05():
    '''
    参数1:input_size 每个词的词向量维度(输入层神经元的个数)
    参数2:hidden_size 隐藏层神经元的个数
    参数3:hidden_layer 隐藏层的层数
    '''
    rnn = nn.RNN(5, 6, 1, batch_first=True)
    '''
    参数1:batch_size 每个批次的样本数量
    参数2:sequence_length 每个样本的句子长度
    参数3:input_size 每个词的词向量维度(输入层神经元的个数)
    '''
    input = torch.randn(3, 4, 5)
    '''
    参数1:hidden_layer 隐藏层的层数
    参数2:batch_size 每个批次的样本数量
    参数3:hidden_size 隐藏层神经元的个数
    '''
    h0 = torch.randn(1, 3, 6)
    output, hn = rnn(input, h0)
    print(f'output {output}')
    print(f'hn {hn}')
    print(f'RNN模型 {rnn}')


# todo:基础LSTM模型
def dem06_1():
    '''
    参数1:input_size 每个词的词向量维度(输入层神经元的个数)
    参数2:hidden_size 隐藏层神经元的个数
    参数3:hidden_layer 隐藏层的层数
    '''
    rnn = nn.LSTM(5, 6, 2)
    '''
    参数1:batch_size 每个批次的样本数量
    参数2:sequence_length 每个样本的句子长度
    参数3:input_size 每个词的词向量维度(输入层神经元的个数)
    '''
    input = torch.randn(1, 3, 5)
    '''
    参数1:hidden_layer 隐藏层的层数
    参数2:batch_size 每个批次的样本数量
    参数3:hidden_size 隐藏层神经元的个数
    '''
    h0 = torch.randn(2, 3, 6)
    '''
    参数1:hidden_layer 隐藏层的层数
    参数2:batch_size 每个批次的样本数量
    参数3:hidden_size 隐藏层神经元的个数
    '''
    c0 = torch.randn(2, 3, 6)
    output, (hn, cn) = rnn(input, (h0, c0))
    print(f'output {output}')
    print(f'hn {hn}')
    print(f'cn {cn}')

# todo:双向LSTM模型
def dem06_2():
    '''
    参数1:input_size 每个词的词向量维度(输入层神经元的个数)
    参数2:hidden_size 隐藏层神经元的个数
    参数3:hidden_layer 隐藏层的层数
    '''
    rnn = nn.LSTM(5, 6, 2,bidirectional=True)
    '''
    参数1:batch_size 每个批次的样本数量
    参数2:sequence_length 每个样本的句子长度
    参数3:input_size 每个词的词向量维度(输入层神经元的个数)
    '''
    input = torch.randn(1, 3, 5)
    '''
    参数1:hidden_layer 隐藏层的层数
    参数2:batch_size 每个批次的样本数量
    参数3:hidden_size 隐藏层神经元的个数
    '''
    h0 = torch.randn(4, 3, 6)
    '''
    参数1:hidden_layer 隐藏层的层数
    参数2:batch_size 每个批次的样本数量
    参数3:hidden_size 隐藏层神经元的个数
    '''
    c0 = torch.randn(4, 3, 6)
    output, (hn, cn) = rnn(input, (h0, c0))
    print(f'output {output}')
    print(f'hn {hn}')
    print(f'cn {cn}')


if __name__ == '__main__':
    # dem01()
    # dem02()
    # dem03()
    # dem04_1()
    # dem04_2()
    # dem04_3()
    # dem05()
    # dem06_1()
    dem06_2()
D:\nlplearning\nlpbase\python.exe D:\nlpcoding\rnncode.py 
output tensor([[[ 0.0207, -0.1121, -0.0706,  0.1167, -0.3322, -0.0686],
         [ 0.1256,  0.1328,  0.2361,  0.2237, -0.0203, -0.2709],
         [-0.2668, -0.2721, -0.2168,  0.4734,  0.2420,  0.0349]]],
       grad_fn=<MkldnnRnnLayerBackward0>)
hn tensor([[[ 0.1501, -0.2106,  0.0213,  0.1309,  0.3074, -0.2038],
         [ 0.3639, -0.0394, -0.1912,  0.1282,  0.0369, -0.1094],
         [ 0.1217, -0.0517,  0.1884, -0.1100, -0.5018, -0.4512]],

        [[ 0.0207, -0.1121, -0.0706,  0.1167, -0.3322, -0.0686],
         [ 0.1256,  0.1328,  0.2361,  0.2237, -0.0203, -0.2709],
         [-0.2668, -0.2721, -0.2168,  0.4734,  0.2420,  0.0349]]],
       grad_fn=<StackBackward0>)
cn tensor([[[ 0.2791, -0.7362,  0.0501,  0.2612,  0.4655, -0.2338],
         [ 0.7902, -0.0920, -0.4955,  0.3865,  0.0868, -0.1612],
         [ 0.2312, -0.3736,  0.4033, -0.1386, -1.0151, -0.5971]],

        [[ 0.0441, -0.2279, -0.1483,  0.3397, -0.5597, -0.4339],
         [ 0.2154,  0.4119,  0.4723,  0.4731, -0.0284, -1.1095],
         [-0.5016, -0.5146, -0.4286,  1.5299,  0.5992,  0.1224]]],
       grad_fn=<StackBackward0>)

Process finished with exit code 0

2 GRU

import torch
import torch.nn as nn


# todo:基础GRU
def dem01():
    gru = nn.GRU(5, 6, 1)
    input = torch.randn(4, 3, 5)
    h0 = torch.randn(1, 3, 6)
    output, hn = gru(input, h0)
    print(f'output {output}')
    print(f'hn {hn}')


if __name__ == '__main__':
    dem01()

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

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

相关文章

基于Python的博客系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

智能化企业新人培训:AI助理如何加速新员融入与成长

在当今这个快速变化的时代&#xff0c;企业新人的培训不再仅仅局限于传统的教室环境&#xff0c;而是越来越多地融入了先进的技术&#xff0c;特别是人工智能&#xff08;AI&#xff09;。AI助理&#xff0c;作为这一变革的先锋&#xff0c;正在以独特的方式重塑企业新人培训的…

废水处理(一)——MDPI特刊推荐

特刊征稿 01 期刊名称&#xff1a; Removing Challenging Pollutants from Wastewater: Effective Approaches 截止时间&#xff1a; 摘要提交截止日期&#xff1a;2024年11月30日 投稿截止日期&#xff1a;2025年5月31日 目标及范围&#xff1a; 该主题是分享去除有毒物…

TQRFSOC开发板47DR 100G光口ping测试

本例程实现TQRFSOC开发板使用100G光口与100G网卡进行ping测试。TQRFSOC开发板有两个100G光口&#xff0c;都将进行测试&#xff0c;所使用的100G网卡同样是我们生产的&#xff0c;有需要的可以配套进行购买。本例程提供两个启动文件&#xff0c;分别对应两个光口&#xff0c;通…

4D-fy: Text-to-4D Generation Using Hybrid Score Distillation Sampling技术路线

这篇文章分为四部分&#xff0c;首先从2021年的CLIP说起。 这篇论文的主要工作是提出了一种名为 CLIP&#xff08;Contrastive Language-Image Pre-training&#xff09; 的模型&#xff0c;它通过自然语言监督学习视觉模型&#xff0c;以实现视觉任务的零样本&#xff08;zer…

「规模焦虑」如影随形,库迪咖啡想靠便捷店突围能行吗?

作者 | 辰纹 来源 | 洞见新研社 “我有一个广东的小兄弟&#xff0c;做了9年的奶茶&#xff0c;后来因为觉得咖啡是一个上升期的赛道&#xff0c;所以毅然决然拿了45万加盟了库迪咖啡&#xff0c;结果全亏损完了&#xff0c;相当于只买了一个配方。” 抖音博主茶饮圈大山哥分…

MyBatis XML映射文件

XML映射文件 XML映射文件的名称与Mapper接口名称一致&#xff0c;并且将XML映射文件和Mapper接口放置在相同包下&#xff08;同包同名&#xff09;XML映射文件的namespace属性为Mapper接口全限定名一致XML映射文件中SQL语句的id与Mapper接口中的方法名一致&#xff0c;并保持返…

C语言_指针_进阶

引言&#xff1a;在前面的c语言_指针初阶上&#xff0c;我们了解了简单的指针类型以及使用&#xff0c;下面我们将进入更深层次的指针学习&#xff0c;对指针的理解会有一个极大的提升。从此以后&#xff0c;指针将不再是难点&#xff0c;而是学习底层语言的一把利器。 本章重点…

ubuntu 开放 8080 端口快捷命令

文章目录 查看防火墙状态开放 80 端口开放 8080 端口开放 22端口开启防火墙重启防火墙**使用 xhell登录**&#xff1a; 查看防火墙状态 sudo ufw status [sudo] password for crf: Status: inactivesudo ufw enable Firewall is active and enabled on system startup sudo…

Linux性能调优,还可以从这些方面入手

linux是目前最常用的操作系统&#xff0c;下面是一些常见的 Linux 系统调优技巧&#xff0c;在进行系统调优时&#xff0c;需要根据具体的系统负载和应用需求进行调整&#xff0c;并进行充分的测试和监控&#xff0c;以确保系统的稳定性和性能。同时&#xff0c;调优过程中要谨…

第二十一节 图像旋转

void QUickdemo::roate_demo(Mat& image) { Mat dst, M; int w image.cols; int h image.rows; M getRotationMatrix2D(Point2f(w / 2, h / 2), 45, 1.0);--M getRotationMatrix2D(Point2f(w / 2, h / 2), 45, 1.0);&#xff1a;使用getRotationMatrix…

Linux学习网络编程学习(TCP和UDP)

文章目录 网络编程主要函数介绍1、socket函数2、bind函数转换端口和IP形式的函数 3、listen函数4、accept函数网络模式&#xff08;TCP&UDP&#xff09;1、面向连接的TCP流模式2、UDP用户数据包模式 编写一个简单服务端编程5、connect函数编写一个简单客户端编程 超级客户端…

jmeter入门:脚本录制

1.设置代理。 网络连接-》代理-》手动设置代理. ip&#xff1a; 127.0.0.1&#xff0c; port&#xff1a;8888 2. add thread group 3. add HTTP(s) test script recorder, target controller chooses Test plan-> thread Group 4. click start. then open the browser …

Windows环境下Qt Creator调试模式下qDebug输出中文乱码问题

尝试修改系统的区域设置的方法&#xff1a; 可以修复问题。但会出现其它问题&#xff1a; 比如某些软件打不开&#xff0c;或者一些软件界面的中文显示乱码&#xff01; 暂时没有找到其它更好的办法。

k8s的微服务

ipvs模式 Service 是由 kube-proxy 组件&#xff0c;加上 iptables 来共同实现的 kube-proxy 通过 iptables 处理 Service 的过程&#xff0c;需要在宿主机上设置相当多的 iptables 规则&#xff0c;如果宿主机有大量的Pod&#xff0c;不断刷新iptables规则&#xff0c;会消耗…

FreeRTOS应用开发学习

了解FreeRTOS 任务相关API FreeRTOS任务创建API FreeRTOS 中&#xff0c;任务的创建有两种方法&#xff0c;一种是使用动态创建&#xff0c;一种是使用静态创建。动态创建时&#xff0c;任务控制块和栈的内存是创建任务时动态分配的&#xff0c;任务删除时&#xff0c;内存可…

推动AI技术研发与应用,景联文科技提供专业高效图像采集服务

景联文科技提供专业图像采集服务&#xff0c;涵盖多个领域的应用需求。 包含人体图像、人脸图像、手指指纹、手势识别、交通道路、车辆监控等图像数据集&#xff0c;计算机视觉图像数据集超400TB&#xff0c;支持免费试采试标。 高质量人像采集服务&#xff1a;支持不同光线条件…

2024年10月16日练习

一.回文数&#xff1a; 思路一&#xff1a; 负数肯定就不是回文数了&#xff0c;所以负数就直接返回flase&#xff0c;正数的话就一位位分解&#xff0c;然后构成一个 新的整数&#xff0c;然后去判断两者是否相等即可&#xff1a; bool isPalindrome(int x) {if (x<0){r…

阿里Dataworks使用循环节点和赋值节点完成对mongodb分表数据同步

背景 需求将MongoDB数据入仓MaxCompute 环境说明 MongoDB 100个Collections&#xff1a;orders_1、orders_2、…、orders_100 前期准备 1、MongoDB数据源配置 需要先保证DW和MongoDB网络是能够联通的&#xff0c;需要现在集成任务中配置MongoDB的数据源信息。 具体可以查…

SldWorks问题 2. 矩阵相关接口使用上的失误

问题 在计算三维点在图纸&#xff08;DrawingDoc&#xff09;中的位置时&#xff0c;就是算不对&#xff0c;明明就4、5行代码&#xff0c;怎么看都是很“哇塞”的&#xff0c;毫无问题的。 但结果就是不对。 那就调试一下吧&#xff0c;调试后发现生成的矩阵很不对劲&#…