深度学习系列(五)循环神经网络 2020.6.22

前言

本节学习循环神经网络

  • 引⼊状态变量来存储过去的信息
  • ⽤其与当前的输⼊共同决定当前的输出

1、语言模型

假设⼀段⻓度为T的⽂本中的词依次为w1,w2……wt
语言模型计算序列w1,w2……wt的概率P(w1,w2……wt)
需要计算词的概率,以及⼀个词在给定前⼏个词的情况下的条件概率,即语⾔模型参数
其中有个n元语法,即n阶⻢尔可夫链

2、循环神经网络

在这里插入图片描述

  • 相较于多层感知机,多了个时间步的隐藏变量
  • 由当前时间步的输⼊和上⼀时间步的隐藏变量共同决定

一个基于字符级循环神经⽹络的语⾔模型
在这里插入图片描述

  • ⽂本序列为“想”“要”“有”“直”“升”“机”
  • 对每个时间步的输出层输出使⽤softmax运算
  • 然后使⽤交叉熵损失函数来计算它与标签的误差

3、实现

import d2lzh as d2l
import math
from mxnet import autograd, nd
from mxnet.gluon import loss as gloss
import time

"""实现⼀个基于字符级循环神经⽹络的语⾔模型"""
# 读取周杰伦专辑歌词数据集
(corpus_indices, char_to_idx, idx_to_char, vocab_size) = d2l.load_data_jay_lyrics()
def to_onehot(X, size):  #将词表⽰成向量输⼊到神经⽹络
    return [nd.one_hot(x, size) for x in X.T]
X = nd.arange(10).reshape((2, 5))
inputs = to_onehot(X, vocab_size)
print(len(inputs), inputs[0].shape)

# 模型参数
num_inputs, num_hiddens, num_outputs = vocab_size, 256, vocab_size
ctx = d2l.try_gpu()
print('will use', ctx)
def get_params():
    def _one(shape):
        return nd.random.normal(scale=0.01, shape=shape, ctx=ctx)
    # 隐藏层参数
    W_xh = _one((num_inputs, num_hiddens))
    W_hh = _one((num_hiddens, num_hiddens))
    b_h = nd.zeros(num_hiddens
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值