numpy实现RNN原理实现


Posted in Python onMarch 02, 2021

首先说明代码只是帮助理解,并未写出梯度下降部分,默认参数已经被固定,不影响理解。代码主要实现RNN原理,只使用numpy库,不可用于GPU加速。

import numpy as np


class Rnn():

  def __init__(self, input_size, hidden_size, num_layers, bidirectional=False):
    self.input_size = input_size
    self.hidden_size = hidden_size
    self.num_layers = num_layers
    self.bidirectional = bidirectional

  def feed(self, x):
    '''

    :param x: [seq, batch_size, embedding]
    :return: out, hidden
    '''

    # x.shape [sep, batch, feature]
    # hidden.shape [hidden_size, batch]
    # Whh0.shape [hidden_size, hidden_size] Wih0.shape [hidden_size, feature]
    # Whh1.shape [hidden_size, hidden_size] Wih1.size [hidden_size, hidden_size]

    out = []
    x, hidden = np.array(x), [np.zeros((self.hidden_size, x.shape[1])) for i in range(self.num_layers)]
    Wih = [np.random.random((self.hidden_size, self.hidden_size)) for i in range(1, self.num_layers)]
    Wih.insert(0, np.random.random((self.hidden_size, x.shape[2])))
    Whh = [np.random.random((self.hidden_size, self.hidden_size)) for i in range(self.num_layers)]

    time = x.shape[0]
    for i in range(time):
      hidden[0] = np.tanh((np.dot(Wih[0], np.transpose(x[i, ...], (1, 0))) +
               np.dot(Whh[0], hidden[0])
               ))

      for i in range(1, self.num_layers):
        hidden[i] = np.tanh((np.dot(Wih[i], hidden[i-1]) +
                   np.dot(Whh[i], hidden[i])
                   ))

      out.append(hidden[self.num_layers-1])

    return np.array(out), np.array(hidden)


def sigmoid(x):
  return 1.0/(1.0 + 1.0/np.exp(x))


if __name__ == '__main__':
  rnn = Rnn(1, 5, 4)
  input = np.random.random((6, 2, 1))
  out, h = rnn.feed(input)
  print(f'seq is {input.shape[0]}, batch_size is {input.shape[1]} ', 'out.shape ', out.shape, ' h.shape ', h.shape)
  # print(sigmoid(np.random.random((2, 3))))
  #
  # element-wise multiplication
  # print(np.array([1, 2])*np.array([2, 1]))

到此这篇关于numpy实现RNN原理实现的文章就介绍到这了,更多相关numpy实现RNN内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
利用Python中的输入和输出功能进行读取和写入的教程
Apr 14 Python
Python使用pylab库实现画线功能的方法详解
Jun 08 Python
判断python字典中key是否存在的两种方法
Aug 10 Python
Python发送邮件测试报告操作实例详解
Dec 08 Python
Python文件常见操作实例分析【读写、遍历】
Dec 10 Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 Python
Python单元测试工具doctest和unittest使用解析
Sep 02 Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 Python
python 安装impala包步骤
Mar 28 Python
python 轮询执行某函数的2种方式
May 03 Python
Python如何解除一个装饰器
Aug 07 Python
使用python操作lmdb对数据读取的实例
Dec 11 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
Mar 02 #Python
python Protobuf定义消息类型知识点讲解
Mar 02 #Python
Django项目在pycharm新建的步骤方法
Mar 02 #Python
基于注解实现 SpringBoot 接口防刷的方法
Mar 02 #Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 #Python
pycharm配置安装autopep8自动规范代码的实现
Mar 02 #Python
Python实现我的世界小游戏源代码
Mar 02 #Python
You might like
需要注意的几个PHP漏洞小结
2012/02/05 PHP
PHP防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
PHP面向对象程序设计之接口用法
2014/08/20 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
纯JavaScript实现的完美渐变弹出层效果代码
2010/04/02 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
js实现星星打分效果的方法
2020/07/05 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
详解JavaScript函数对象
2015/11/15 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
vscode下vue项目中eslint的使用方法
2019/01/13 Javascript
ES6 Promise对象的应用实例分析
2019/06/27 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python list 合并连接字符串的方法
2013/03/09 Python
pygame学习笔记(1):矩形、圆型画图实例
2015/04/15 Python
Python数据类型详解(一)字符串
2016/05/08 Python
python 调用HBase的简单实例
2016/12/18 Python
python变量的存储原理详解
2019/07/10 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
华润集团网上药店:健一网
2016/09/19 全球购物
农林环境专业求职信
2014/03/13 职场文书
安全生产管理责任书
2014/04/16 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书
2015年七一建党节活动方案
2015/05/05 职场文书
分享几个JavaScript运算符的使用技巧
2021/04/24 Javascript
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS