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 相关文章推荐
python3设计模式之简单工厂模式
Oct 17 Python
python装饰器实例大详解
Oct 25 Python
tensorflow TFRecords文件的生成和读取的方法
Feb 06 Python
基于pandas数据样本行列选取的方法
Apr 20 Python
Selenium鼠标与键盘事件常用操作方法示例
Aug 13 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 Python
python flask解析json数据不完整的解决方法
May 26 Python
对python3 Serial 串口助手的接收读取数据方法详解
Jun 12 Python
Python3 chardet模块查看编码格式的例子
Aug 14 Python
pandas实现DataFrame显示最大行列,不省略显示实例
Dec 26 Python
Django 再谈一谈json序列化
Mar 16 Python
详细总结Python常见的安全问题
May 21 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超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
Laravel学习教程之request validation的编写
2017/10/25 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
2014/01/08 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
jquery实现鼠标悬浮停止轮播特效
2020/08/20 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
Javascript实现一朵从含苞到绽放的玫瑰
2019/03/30 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
2019/05/26 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
jQuery实现点击滚动到指定元素上的方法分析
2020/03/19 jQuery
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
python控制台中实现进度条功能
2015/11/10 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
使用Python脚本zabbix自定义key监控oracle连接状态
2019/08/28 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
python Canny边缘检测算法的实现
2020/04/24 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
css3 自定义字体font-face使用介绍
2014/05/14 HTML / CSS
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
酒店总经理工作职责
2013/12/13 职场文书
家长寄语大全
2014/04/02 职场文书
护士求职信
2014/07/05 职场文书
艺术设计专业毕业生推荐信
2014/07/08 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
2019求职信大礼包
2019/05/15 职场文书
nginx服务器的下载安装与使用详解
2021/08/02 Servers
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis