首页 > 其他分享 >循环神经网络

循环神经网络

时间:2023-08-27 17:11:37浏览次数:48  
标签:num batch char 神经网络 循环 indices corpus size

循环神经网络

from mxnet import nd

x, w_xh = nd.random.normal(shape=(3, 1)), nd.random.normal(shape=(1, 4))
h, w_hh = nd.random.normal(shape=(3, 4)), nd.random.normal(shape=(4, 4))

print(nd.dot(x, w_xh) + nd.dot(h, w_hh))

print(nd.dot(nd.concat(x, h, dim=1), nd.concat(w_xh, w_hh, dim=0)))

语言模型数据集(歌词)

提取数据:

 

from mxnet import nd
import random
import zipfile

with zipfile.ZipFile(r'C:\Users\ROG\Downloads\d2l-zh\data\jaychou_lyrics.txt.zip') as zin:
    with zin.open('jaychou_lyrics.txt') as f:
        corpus_chars = f.read().decode('utf-8')
print(corpus_chars[:40])

# 这个数据集有6万多个字符。为了打印方便,我们把换行符替换成空格,然后仅使用前1万个字符来训练模型。

corpus_chars = corpus_chars.replace('\n', ' ').replace('\r', ' ')
corpus_chars = corpus_chars[0:10000]

# 建立字符索引

# 从你的先前代码中获取了一个字符串变量 corpus_chars,它包含了要处理的文本数据。

# Step 1: 创建索引到字符的映射 (idx_to_char)

# 这一步首先使用 set(corpus_chars) 获取了 corpus_chars 中不同的字符,然后使用 list() 转换为列表。
# 这样就创建了一个包含了文本中所有不同字符的列表 idx_to_char。
# 例如,如果文本中有字母 'a'、'b'、'c',那么 idx_to_char 列表就会包含 ['a', 'b', 'c']。

idx_to_char = list(set(corpus_chars))

# Step 2: 创建字符到索引的映射 (char_to_idx)
char_to_idx = dict([(char, i) for i, char in enumerate(idx_to_char)])

# 这里使用了列表解析,遍历了 corpus_chars 中的每个字符,并为每个字符创建了一个键值对 (char, i),
# 其中 char 是字符,i 是该字符在列表中的索引。这样就建立了字符到索引的映射。
# 例如,如果字符 'a' 在 corpus_chars 中第一次出现,它会被映射到索引 0,以此类推。

# Step 3: 计算词汇表大小 (vocab_size)
vocab_size = len(char_to_idx)

# 这一步简单地计算了 char_to_idx 字典的长度,即不同字符的数量。
# 这个数量就是词汇表的大小,通常用于设置神经网络中的嵌入层的维度,或者作为输出层的类别数。
# 例如,如果文本中有 26 个不同的字母,则 vocab_size 就是 26。

# 最终,你可以使用 char_to_idx 字典将文本中的字符转换为整数索引,
# 使用 idx_to_char 列表将整数索引转换回字符,以便进行深度学习模型的训练和预测。

print(vocab_size)

corpus_indices = [char_to_idx[char] for char in corpus_chars]
sample = corpus_indices[:20]
print('chars:', ''.join([idx_to_char[idx] for idx in sample]))
print('indices:', sample)


# 随机采样

def data_iter_random(corpus_indices, batch_size, num_steps):
    num_examples = (len(corpus_indices) - 1) // num_steps
    epoch_size = num_examples // batch_size
    examples_indices = list(range(num_examples))
    random.shuffle(examples_indices)

    def _data(pos):
        return corpus_indices[pos: pos + num_steps]

    for i in range(epoch_size):
        i = i * batch_size
        batch_indices = examples_indices[i:i + batch_size]

        x = [_data(j * num_steps) for j in batch_indices]
        y = [_data(j * num_steps + 1) for j in batch_indices]

        yield nd.array(x), nd.array(y)


my_seq = list(range(30))
for x, y in data_iter_random(my_seq, batch_size=2, num_steps=6):
    print('X: ', x, '\nY:', y, '\n')


def data_iter_consecutive(corpus_indices, batch_size, num_steps, ctx=None):
    corpus_indices = nd.array(corpus_indices, ctx=ctx)
    data_len = len(corpus_indices)
    batch_len = data_len // batch_size
    indices = corpus_indices[0: batch_size * batch_len].reshape((
        batch_size, batch_len))
    epoch_size = (batch_len - 1) // num_steps
    for i in range(epoch_size):
        i = i * num_steps
        X = indices[:, i: i + num_steps]
        Y = indices[:, i + 1: i + num_steps + 1]
        yield X, Y


for X, Y in data_iter_consecutive(my_seq, batch_size=2, num_steps=6):
    print('X: ', X, '\nY:', Y, '\n')

 

标签:num,batch,char,神经网络,循环,indices,corpus,size
From: https://www.cnblogs.com/o-Sakurajimamai-o/p/17660491.html

相关文章

  • 【BP分类】基于粒子群优化算法优化BP神经网络的数据分类预测附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进。......
  • 【免费】基于径向基神经网络的时间序列预测附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进。......
  • 二、条件语句和while循环
    条件语句和while循环流程控制语句(if)If:关键字特殊含义:如果功能:判断功能使用(语法规则):if条件表达式:当条件表达式的运算结果为True执行缩进里面的代码if条件表达式:\nelse:Else:else是关键字含义:否则功能:判断if条件表达式:elif条件表达式:else:elif:elif是关键字含义:否则如果功能:判......
  • 学习笔记413—python实现BP神经网络进行预测和误差分析(附源代码)
    python实现BP神经网络进行预测和误差分析(附源代码)反向传播算法也称为BP神经网络,是一种带有反馈的神经网络反向学习方法,它可以对神经网络的各层上的各个神经元的各个神经元之间的连接权重进行不断迭代修改,使神经网络将输入数据转换成期望的输出数据 BP神经网络的学习过程由正向......
  • 循环队列的定义、入队、出队等操作 C++代码实现
    #include<iostream>usingnamespacestd;/*循环队列的类型定义*/constintQueue_Size=100;typedefstructcirclQueue{char*elem;intrear;intfront;intqueueSize;}circlQueue;/*初始化*/voidinitQueue_C(circlQueue&......
  • 4.循环结构
    一、循环结构1.range()函数range(开始,结束,步长),如果range()中只放一个数字,就是获得0到这个数字减1#输出1-10之间所有的数字 foriinrange(1,11): print(i,end='')2.for循环输出字符串a=input()foriina:print(i,end='')二、while循环1.while循环格式:while条......
  • 【GRU回归预测】基于门控循环单元GRU实现数据多维输入单输出预测附matlab代码
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • GPT之路(四) 神经网络架构Transformer工作原理
     原文:WhatAreTransformerModelsandHowDoTheyWork?Transformer模型是机器学习中最令人兴奋的新发展之一。它们在论文AttentionisAllYouNeed中被介绍。Transformer可以用于写故事、文章、诗歌,回答问题,翻译语言,与人类聊天,甚至可以通过对人类来说很难的考试!但是它们到底......
  • EF 多对多循环引用序列化失败 解决办法
    解决办法:外键添加[JsonIgnore]特性即可解决 ///<summary>///文章相册///</summary>[Table("ArticleAlbum")]publicclassArticleAlbumModel{///<summary>///主键ID///</summary>[Display(Name="主键ID")]......
  • Python基础教程06 - 循环
    循环用于重复执行一些程序块。从上一讲的选择结构,我们已经看到了如何用缩进来表示程序块的隶属关系。循环也会用到类似的写法。for循环for循环需要预先设定好循环的次数(n),然后执行隶属于for的语句n次。基本构造是for元素in序列:   statement举例来说,我们编辑一个叫forDemo......