PyTorch | 基于GRU模型的古诗AI实践

01 | NLP领域的RNN与GRU

2019年,一款国内少见的真人实拍互动影游《隐形守护者》上线Steam/Mac等多平台,其中有一句台词令自己印象深刻:“在理想主义者眼中,什么都是马尔科夫链。”

当时的自己精神一振,不明觉厉,后查阅资料,发现这里的马尔科夫链正是高等数学所学的Markov模型。最通俗地讲:以时间角度分析先后发生的一系列事件,则可以说时刻t事件的发生由t时刻之前的所有事件共同决定。

仔细想想,这是容易理解并接受的:比如早上起床去上课,陆续经历了【起床穿衣→洗漱→上厕所→准备食用早餐→出门去教室】。我们能否8点前准时出现在教室中,取决于早起后的每一个环节进展是否顺利,如果出门后发现忘记带手机折返,那么无疑会延后到达教室的时间。

人工智能领域中将上述理论称呼为“时间序列模型”,出于工程上实现的考虑,通常不是考察时刻t之前的所有事件,而是分析时刻t-1或时刻t-1、t-2时刻事件对时刻t事件的影响,通常称之为“一阶或二阶Markov链”。

类似的时间序列关系同样出现在自然语言领域(NLP)。如果主语是单数,则谓语可能是“is”;反之则可能是“are”。但是NLP的关联更加复杂,单纯的一阶或二阶Markov链无法刻画较长字符间的关联,如下例中,与问题最相关的“北京”反而“距离”更远。

我出生在北京,大学毕业后来美国攻读博士。毫无疑问,我最擅长的语言是(汉语/英语)。

为了解决上述问题,人们提出了RNN(循环神经网络),其特有的结构可以将特定时间节点的信息向后传递。

典型的神经网络通常包含输入层、隐藏层与输出层;RNN的改进是在输出层之外,新“搭建了一条通道”将当前的信息传递给下一个时刻,即:

在这里插入图片描述

RNN模型一度在NLP领域表现出强大的生机,然而为了更好地模型拟合效果,人们倾向于增加隐藏层数量,而常用的sigmod\tahn之类的激活函数通常最多只有6层左右,反向误差会随着层数增加而越来越小,最终导致无法反向影响到更远的模型参数,结果就是RNN模型无法学习太长的序列特征。

为此人们尝试了两种改进思路:

①使用更复杂的结构作为RNN模型的基本单元,从而使其在单层网络上提取更好的记忆特征;

②将多个基本单元结合起来,组成不同的结构(如多层RNN、双向RNN等)

从第一种思路出发,人们陆续提出了LSTM(Long Short Term Memory)和GRU(Gated Recurrent Unit)模型,后者相对前者进一步简化了输出,且效果差不多,因而本文将选择使用GRU实现古诗AI。

在进一步介绍项目代码前,需要特别说明一点:LSTM/GRU的模型具有空间和时间两个维度:从时间上看,其输入和输出都是一个序列;但是确定时间后从空间上看,则是一个经典的神经网络——关键问题是通过“搭桥”方式建立了不同时间点下神经元信息传递的通路——其信息传递的权重参数则由模型根据数据自动学习迭代(如下图所示)。

在这里插入图片描述

02 | 项目整体架构

为了实现一个基于GRU的古诗AI,我们的小项目整体分为下述几个部分:

①数据预处理:收集古诗数据,并预处理为规范形式;

②映射嵌入向量:将原有的中文字符映射为数值向量;

③数据类初始化:使用torch.utils.data中的Dataset初始化数据,使用Dataloader按批次迭代加载数据;

④模型训练:指定Epoch和每个Epoch的Batch,每个Batch反向迭代一次模型参数;

⑤模型应用:随机指定中文字符,模型自动写诗。

在这里插入图片描述

03 | 古诗数据预处理

网上搜集中文古诗文数据有很多版本,自己采用的是JSON格式版本。因此首要工作就是解析JSON数据以提取古诗文本字符数据。

这里唯一需要注意的是JSON文件以字典形式存放,因而可以循环迭代读取字典,判断其是否具有自己关心的键值即可。

为了后续测试方便,区分为五言古诗和七言绝句,分别提取建立相应的古诗原始数据文件。
简要代码如下:

在这里插入图片描述在这里插入图片描述

04 | 词向量嵌入映射

AI模型输入与输出均应是数值向量模式,那么如何将中文字符转变为数值向量呢?

一种方法是基于“one-hot”的独热编码,基本思路是统计所有出现的中文字符建立大词典,以不同位置设置“1”表示不同的中文字符。好处是容易想到,方便实现;不足是所有的字符间缺乏关联,无法体现字词间的内在关联。

所以更推荐的方法是基于“word embedding”的方式,常见的可以基于图模型或单独的ANN训练得到。为了方便,本文使用的是NLP领域常用的gensim模块中的Word2Vec模块,自动实现字符到数值向量的嵌入映射。

同时为了后续模型应用,我们需要将训练得到的词嵌入矩阵保存下来,推荐使用Python默认的pickle模块即可,因为其可以将Python对象“原封不动”地保存在文件中(当然仅适用于Python)。

在这里插入图片描述

05 | 数据模块

接下来需要为古诗AI模型准备投喂的数据。

按道理应该将所有古诗一次性送入GRU模型进行训练,然后计算总的损失并反向迭代更新模型参数;然而由于样本数据量通常太大,导致算力无法一次性完成计算,因而实际中通常将整体训练过程分为多个Epoch:

①所有的数据都参与过一次训练,称之为一次Epoch;

②由于数据量太大,所以在一次Epoch中,将数据分成不同的Batch,每次向模型输入一个Batch并计算一次反向误差迭代更新;

③如此便成了多个Epoch下多个Batch的计算反向迭代过程。

按照上述描述,我们自然的数据封装顺序应当是【Batchsize→Sequence→Embedding dim】,如下图所示,当Batchsize=3时,一次输入三个句子,每个句子4个字(Squence),每个字又是4嵌入维度,即得到形状如【3,4,4】的张量(Tensor)。

在这里插入图片描述
使用torch.utils.data下Dataset和Dataloader类的好处就是,PyTorch可以自动帮我们从数据集中挑取、组合成【3,4,4】的训练张量和相应的标签张量,从而后续直接调用即可实现模型训练。

在使用Dataset和Dataloader类时有几点需要特别注意:

①使用的类为torch.utils.data下的Dataset和Dataloader

②Dataset类的作用在于加载全部所需的数据(包含初始化),同时定义清楚如何取得一个样本的数据, 因此需要重载__getitem__(self, idx)和__len__(self)两个函数

③Dataloader加载器返回一个可迭代对象,负责按需按批次从数据中取得数据

④注意对于训练输入x需要映射为词向量,对于标签仅停留在index即可,因为后续计算损失时不需要向量,仅index即可

具体可参考如下代码:

在这里插入图片描述

06 | 模型定义与训练

接下来需要定义我们自己的GRU模型,由于PyTorch的模型都源于共同的父类nn.Module,因此需要在定义时建立继承关系。

我们的GRUModel类中主要包含两部分:

①初始化构造函数:首先调用父类的初始化函数,然后将所需数据全部内化为类内数据;接下来定义神经网络结构中各个组成部分,如GRU层、flatten层、dropout层、全连接fc层以及交叉熵损失函数

②定义前向传播函数:主要用于PyTorch构造计算图,按数据流向顺序组合神经网络中定义的各个层即可

模型训练阶段关键是利用Dataloader得到的迭代器,顺序取出相应的数据即可。

在这里插入图片描述

07 | 测试输出

为了验证我们古诗模型的效果,在训练的同时即可周期性打印模型损失,同时还可以随机输入中文字符以生成诗句。具体可参考下述代码:

在这里插入图片描述
在这里插入图片描述当训练到最后时,可以查看输出的诗句,以验证古诗AI的效果,整体看来还是满足押韵的,但是由于自己训练时采用的是单句16字符,因而上下句间关联可能并不明显。

在这里插入图片描述

08 | 结语

作为自己学习使用PyTorch后的第一个入门小项目,中途查阅了不少资料,但是大多缺失了一些关键细节,好在最后终于在不断碰壁中写出了雏形。

现有的项目依然有很大的改进空间:

①古诗训练集按照七言绝句的单句输入(16字符),因而所作诗句上下句缺乏意境关联;

②未尝试“藏头诗”功能,其实思路也相对简单,现有的模式是指定第一个字,连续输出15个字符成为一句;届时可能需要分别指定四句首字,而后生成后续7个字符即可,但是如此以来,四句诗的意境关联何在?

问题留待以后再考虑吧,今天大脑已经要罢工了(#^.^#)

在这里插入图片描述

5Hz语音AI:语义驱动的稀疏计算如何重构实时语音交互 语音AI并非帧率越高越好,其本质是面向语义事件的异步处理系统。传统高帧率方案(如25Hz)沿用视频思维,导致大量算力浪费在静音、拖音和噪声帧上;而以5Hz为代表的稀疏帧率范式,依托语音事件检测(VED)与动态上下文缓存(DCC)等关键技术,实现‘只在关键语义点触发推理’。这种设计显著降低端侧延迟、功耗与带宽压力,同时提升抗噪鲁棒性与多轮对话连贯性,特别适用于TWS耳机、IoT中控、工业手持等边缘语音设备。本文深入拆解5Hz背后的技术逻辑与工程落地路径。 阅读详情

相关推荐

NLP实践项目五:基于GRU的古诗生成(pytorch实现)

直接看代码:github传送门 数据集:古诗数据集 1. 数据预处理: 将古诗存为上图的格式,每行一首诗,便于使用torchtext读取。 2. 模型定义     模型就是一个简单的GRU模型, 3. 模型训练和测试     训练过程中如同翻译模型中的teaching forcing,输入是[<start>,x1,x2,...xn][<start>,x_1, x_2, ... x_n][<star

phil的博客 3504

使用GRU单元的RNN模型生成唐诗

文章目录1. 读取数据2. 字符索引3. 创建文本序列4. 创建文本编码序列5. 使用GRU单元建立RNN模型6. 文本生成 参考 基于深度学习的自然语言处理 本文使用 GRU 单元建立 RNN 网络,使用唐诗三百首进行训练,使用模型生成唐诗。 GRU RNN 网络能够克服简单RNN网络的一些问题,如梯度消失,梯度很难从深层传递到浅层,导致浅层的参数更新非常缓慢,学习速度很慢,还导致深层浅层学习不均衡。 GRU,LSTM 使用更新门,遗忘门,来解决长距离的依赖关系,GRU相比LSTM参数更少。 RNN 网络

Michael是个半路程序员 1196

Python实战:基于RNN的诗歌生成系统开发

聊了这么多技术细节,我想留给你一个小问题:当AI写出的诗越来越像人,我们该如何定义“创作”本身?有一次我把模型生成的几句诗拿给一位老教授看,他认真读完说:“不错,格律对仗都没问题,但总觉得少了点魂。我当时没明白,直到后来重读李白的《将进酒》,突然懂了——那种“天生我材必有用”的豪情,不是靠统计规律能学会的。所以我觉得,与其指望AI替代诗人,不如把它当作一个灵感激发器。就像毛笔不会写字,但书法家能让它舞动生花。技术的本质,从来都不是取代人类,而是扩展我们的可能性边界 🌈。

weixin_28872035的博客 628

时间序列预测实战(十五)PyTorch实现GRU模型长期预测并可视化结果

本文讲解的实战内容是GRU(门控循环单元),本文的实战内容通过时间序列领域最经典的数据集——电力负荷数据集为例,深入的了解GRU的基本原理和框架,下面是预测值和真实值的对比图先给大家放在前面。预测类型->单元预测、多元预测、长期预测门控机制:GRU的核心是门控机制,包括更新门(update gate)和重置门(reset gate)。这些门控制着信息的流动,即决定哪些信息应该被保留,哪些应该被遗忘。更新门:更新门帮助模型决定过去的信息有多少需要保留到当前状态。

Snu77的博客 1万+

一步步教你如何实现LSTM和GRU实现机器作藏头诗(附全部代码及诗歌训练文件下载即用)

我们将构建一个基于RNN的模型,使用SimpleRNN作为示例。你也可以尝试使用LSTM或GRU,但在这个示例中,我们使用了SimpleRNN以上步骤展示了如何利用LSTM和GRU生成诗歌。这里使用了简单的RNN,你可以通过使用LSTM或GRU来改善生成的质量。希望这篇教程能帮助你了解如何用深度学习来创作诗歌。

qq_37465201的博客 877

【Python】SimpleITK使用笔记

1. 概念 1.1 nii格式 1.2 SimpleITK 1.3 SimpleITK 图像 2. 基本操作 2.1 常见属性 2.1 读取和保存图像 2.2 SimpleITK图像数据和Numpy矩阵数据之间的转换

See_Star的博客 7898

TOP15 AI测试工具(更新至2025年)

AI测试工具是利用人工智能(AI)和机器学习(ML)自动化和优化软件应用程序测试过程的软件解决方案。这些工具通过使用AI算法来识别模式、检测错误,甚至预测应用程序中的潜在故障,从而增强了传统的测试自动化。与传统的测试方法不同,AI测试工具能够适应代码的变化,使它们对动态和复杂的应用程序更加高效。例如,AI测试工具中的自我修复功能可以在应用程序的用户界面发生变化时自动更新测试脚本,从而减少了对人工干预的需求。

fzxwl的博客 4273

[misc]智能车协议分析:2020网鼎杯青龙组misc_teslaaaaa_wp

[misc]智能车协议分析:2020网鼎杯青龙组misc_teslaaaaa_wp 文章目录[misc]智能车协议分析:2020网鼎杯青龙组misc_teslaaaaa_wp分析log文件格式分析协议组成UDS网络传输层UDS统一诊断服务协议分析文件提取文件逆向flag计算参考链接: teslaaaaa这道题是青龙组被做出来的题目中做出来人数最少的,直到比赛快结束才有第一个人做出来,怎么说,难并不是因为脑洞大,讲道理这道题是一道好题,我当时也是肝了一天没做出来,我倒是把文件提取出来了,奈何比赛时间已经接近尾

Breeze的博客 1万+

中文自然语言处理--基于双向GRU 生成各种古诗

使用 LSTM 的变形 GRU 中文字符级建模,训练出一个能作诗的模型 数据集集为4000+古诗,一行一首,标题、作者已去掉: https://download.youkuaiyun.com/download/fgg1234567890/16153813 import os import random import pandas as pd import numpy as np # 引入需要的模块 from keras.layers import Bidirectional from keras.layers impo

糯米君的博客 1083

用Quartus II和LPM_ROM手把手复现西电计组课设:从微指令到五条指令的完整流程

本文详细介绍了使用Quartus II和LPM_ROM复现西电计组课设的完整流程,从微指令编写到五条指令的实现。通过环境搭建、LPM_ROM配置、微程序设计及调试技巧,帮助读者高效完成课程设计,避开常见问题。适合计组课程设计的学习者和实践者参考。

weixin_29288313的博客 456

【工具】GitHub学生认证+PyCharm配置Copilot全流程指南

本文提供了一份详细的GitHub学生认证及在PyCharm中配置Copilot的完整指南。通过完成A2F认证、准备有效材料并使用干净网络环境,学生可免费获取GitHub Copilot Pro订阅,极大提升编程学习与开发效率。

w7x8y9z的博客 1459

Google Devfest 2024 上海站嘉宾抢先看 | 你,要跟我们一起构建那个 AI 未来世界吗?

DevFest2024 Shanghai

nanxuan521的专栏 2190

粒子群算法Particle Swarm Optimization超详细解析+代码实例讲解

粒子群算法,也称粒子群优化算法或鸟群觅食算法(Particle Swarm Optimization),缩写为 PSO, 是近年来由J. Kennedy和R. C. Eberhart等开发的一种新的进化算法(Evolutionary Algorithm - EA)。

猫敷雪 893

从零到一搭建AI诗人:深度解读RNN循环神经网络与古诗生成实战

计算机能够理解“硬语言”——编程语言的语法规则是确定的、无歧义的,编译器可以按照机械化的规则解析每一行代码的含义。然而,当我们试图让计算机理解汉语或英语这样的“软语言”时,传统方法便捉襟见肘了。汉语的含义和形式灵活多变,新词层出不穷,同一个词语在不同语境下可能表达截然不同的意思。如何让计算机不仅理解语言,还能像人类一样“创作”语言?这正是本文要深入探讨的核心问题。自然语言处理(Natural Language Processing, NLP)的目标是让计算机理解人类语言,进而完成对人类有帮助的事情。

闵浮龙的博客 632

Unity Hololens2开发|(一)环境配置

开发过程中预览和调试应用:可以在电脑上的 Unity 编辑器中以播放模式本地运行应用,并将体验流式传输到 HoloLens2。将来自 HoloLens2 的输入(视线、手势、语音和空间映射)发送到电脑,在其中内容以虚拟沉浸式视图渲染。在HoloLens2设备中,打开Settings面板,依次选择Update & Security > For Developers,打开“Developer Mode”。在开发计算机中打开控制面板,依次选择“更新和安全> 开发者选项”,打开“开发人员模式”;

游戏开发小Y的博客 14万+

分布式计算Ray框架:从入门到精通完全教程

想象一下,你有一个机器学习模型要训练,数据集大到让你的笔记本电脑直冒烟;或者你需要并行跑几百个爬虫任务,但线程池和多进程搞得你头晕眼花。传统的单机计算已经hold不住这些场景,分布式计算应运而生。然而,传统的分布式框架(如Hadoop、Spark)要么配置复杂,要么对动态任务支持不佳。这时候,Ray闪亮登场!Ray是一个开源的分布式计算框架,专为高性能、灵活性和易用性而生。它最初由UC Berkeley的RISELab团队开发,目标是让开发者用最少的代码实现分布式任务。无论是数据处理、机器学习,还是仿真任务

大模型大数据攻城狮的专栏 1318

1小时打造智能诗歌生成器:RNN原型开发实录

通过这次实践,验证了用InsCode(快马)平台快速开发AI项目的可行性。从数据准备到模型训练,再到Web部署,所有环节都能在一个平台完成,最关键的是部署环节完全不需要操心服务器配置,生成的应用链接可以直接分享给朋友测试。对于想快速验证RNN文本生成效果的同学,这种端到端的开发体验确实能节省大量环境搭建时间。

AmberLeopard26的博客 708

【即插即用模块】Transformer篇 | CVPR 2025 | D2T:双域特征融合,完美适配缺陷检测/小目标检测和分割等频域细节敏感的任务!

本文提出了一种基于小波和原型增强的双域Transformer(WPFormer)用于像素级表面缺陷检测。该模型通过Dual-domain Transformer (D2T)模块融合频域和空间域特征:小波增强交叉注意力(WCA)分解高低频特征并加权平衡,增强缺陷细节捕捉;原型引导注意力(PCA)生成全局原型向量强化关键信息聚合。实验表明,该模块在缺陷检测任务中性能优于现有方法,通过频域细节增强和全局依赖建模有效提升了复杂场景下的检测效果。代码已开源,适用于对频域敏感的目标检测和分割任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1374

基于Python的RNN文本生成写诗系统

填空题:我坐在马路牙子上正抽烟,远处,一个男人掏出烟,熟练的抽出一根叼进嘴里,摸摸了上衣兜,又拍了拍裤兜,他摇了摇头,向我走来,他说:兄弟,_____。',': 0, '光': 1, '几': 2, '前': 3, '床': 4, '时': 5, '明': 6, '月': 7, '有': 8。比如数字识别0~9,我有500个神经元参与判断,但是最终输出结果就是10个通道(0,1,2,3,4,5,6,7,8,9)。填空题:我抽烟,男人掏出烟,叼进嘴里,他摇了摇头,他说:兄弟,_____。文字是有情感关系的。

毕业作品网站 2422

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

bert pytorch源码_Soft-Masked-Bert网络细节解读

大家好,我是隔壁小王。Soft-Masked-Bert是复旦大学和字节跳动联合发布的在bert基础上针对文本纠正的网络模型,这里对其细节进行一个梳理。考虑到我另外一个网络中有讲过bert的细节,因此这里姑且把bert作为一个黑盒,详细介绍下smbert相比与bert改动的部分。首先上图:别看它这个图挺唬人,其实改动非常简单,该网络主要加入的是一个错别字的检测网络部分也就是图中的Detection ...

weixin_42302638的博客 365

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

AI: 一文读懂循环神经网络(RNN)

摘要: 循环神经网络(RNN)是处理序列数据的核心模型,通过隐藏状态传递历史信息实现序列依赖建模。其核心结构在每个时间步接收当前输入和上一状态,通过时间展开形成链式结构。针对传统RNN的梯度消失问题,LSTM引入遗忘门、输入门和输出门增强长期记忆能力,GRU则通过简化门控结构提升效率。RNN在自然语言处理(文本生成、情感分析)、时间序列预测和语音识别等领域有广泛应用,但面临梯度不稳定和训练复杂度高的挑战。PyTorch等框架为RNN实现提供了便捷工具,LSTM等改进模型显著提升了序列建模性能。未来结合注意力

xyzroundo的专栏 1584

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Pytorch-NCE 项目使用教程

Pytorch-NCE 项目使用教程 1. 项目目录结构及介绍 Pytorch-NCE/ ├── example/ │ ├── log/ │ ├── nce/ │ │ ├── nce_loss.py │ │ ├── alias_multinomial.py │ │ ├── index_linear.py │ │ ├── index_gru.py │ ├─...

gitblog_00058的博客 444

深度学习入门:一文搞懂循环神经网络(RNN)原理与实战

深度学习入门:循环神经网络(RNN)原理与应用 摘要:本文介绍了循环神经网络(RNN)在处理序列数据中的核心作用,包括自然语言处理(NLP)基础、词嵌入技术、RNN原理及改进方案(LSTM/GRU)。文章首先解释了RNN在文本预测、机器翻译等任务中的必要性,然后详细讲解了词嵌入层如何将文字转化为向量表示。重点剖析了RNN的记忆机制和计算过程,指出其局限性并介绍了LSTM和GRU的改进方案。最后通过PyTorch实现周杰伦歌词生成案例,展示了RNN的实际应用。全文兼顾理论与实践,帮助读者深入理解RNN的核心思

yun_kumo1028的博客 1662

Transformer 大模型架构深度解析(2)RNN 循环神经网络模型在 NLP 中的应用

值得注意的是,Sequence Model 的 “历史记忆” 和 Hopfield Network 的 “联系记忆” 有本质的区别,“联想记忆” 并不适用于处理序列数据,而 “历史记忆” 的目标是发现序列数据中的模式和依赖关系,从而进行预测、分类,甚至生成新的序列。如下图所示,RNN 和 FFN 结构的主要区别就是 RNN 引入了一个循环结构,RNN 在每个时间步(t)处理一个序列元素时,不仅会接收当前的输入,还会接收来自上一个时间步(t-1)的隐藏状态(Hidden State)。

烟云的计算 1304

Cursor 破局的关键:两个 PMF | Cursor 底层模型 / 使用教程

……

u013669912的博客 1万+

【亲测免费】 推荐系统新星:基于PyTorch的GRU4REC模型

推荐系统新星:基于PyTorch的GRU4REC模型 在个性化推荐领域,深度学习的应用正逐渐成为主流。今天,我们要推荐的是一个强大的开源项目——GRU4REC-PyTorch,它是一款基于PyTorch实现的循环神经网络(RNN)模型,专为基于会话的推荐设计。该模型通过集成Gated Recurrent Units(GRU),有效地捕捉用户在不同会话中的行为模式,进而提升推荐的准确性与相关性。 项...

gitblog_00397的博客 1156
上一篇: PyTorch | 张量Tensor变形记
下一篇: AI | 自注意力机制(Self-Attention)
木千之
博客等级 码龄12年 34粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值