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实现2014火车票查询代码分享
Jan 10 Python
python正则表达式re模块详细介绍
May 29 Python
Python中类的继承代码实例
Oct 28 Python
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
Apr 01 Python
python函数的5种参数详解
Feb 24 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
Django实现跨域的2种方法
Jul 31 Python
python快速编写单行注释多行注释的方法
Jul 31 Python
keras topN显示,自编写代码案例
Jul 03 Python
Python logging日志模块 配置文件方式
Jul 12 Python
记录一下scrapy中settings的一些配置小结
Sep 28 Python
python爬虫多次请求超时的几种重试方法(6种)
Dec 01 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
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
PHP实现随机发扑克牌
2020/04/22 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
Js 回车换行处理的办法及replace方法应用
2013/01/24 Javascript
js跳转页面方法实现汇总
2014/02/11 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
完美实现八种js焦点轮播图(下篇)
2020/04/20 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
五步轻松实现JavaScript HTML时钟效果
2020/03/25 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
[57:55]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第二场 12.12
2020/12/16 DOTA
python 爬取微信文章
2016/01/30 Python
python学习之matplotlib绘制散点图实例
2017/12/09 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
浅谈tensorflow中张量的提取值和赋值
2020/01/19 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
美的官方商城:Midea
2016/09/14 全球购物
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
《李广射虎》教学反思
2014/04/27 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
党员剖析材料范文
2014/09/30 职场文书
党员批评与自我批评
2014/10/15 职场文书
2015年汽车销售工作总结
2015/04/07 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
JavaScript实现优先级队列
2021/12/06 Javascript