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解析xml文件实例分享
Dec 04 Python
在Python中操作时间之mktime()方法的使用教程
May 22 Python
python统计文本字符串里单词出现频率的方法
May 26 Python
21行Python代码实现拼写检查器
Jan 25 Python
Windows下安装python MySQLdb遇到的问题及解决方法
Mar 16 Python
python 实现上传图片并预览的3种方法(推荐)
Jul 14 Python
用Python写一段用户登录的程序代码
Apr 22 Python
python隐藏终端执行cmd命令的方法
Jun 24 Python
简单瞅瞅Python vars()内置函数的实现
Sep 27 Python
python二元表达式用法
Dec 04 Python
Python super()方法原理详解
Mar 31 Python
Python xlrd模块导入过程及常用操作
Jun 10 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数据库解决方案分析介绍
2015/09/24 PHP
php上传图片获取路径及给表单字段赋值的方法
2016/01/23 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
js判断屏幕分辨率的代码
2013/07/16 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
javascript抖动元素的小例子
2013/10/28 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
jQuery插件简单实现方法
2015/07/18 Javascript
javascript实现别踩白块儿小游戏程序
2015/11/22 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
浅析Ajax语法
2016/12/05 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
一个可复用的vue分页组件
2017/05/15 Javascript
解决Mac安装thrift因bison报错的问题
2018/05/17 Javascript
Vue表单及表单绑定方法
2018/09/04 Javascript
js+canvas实现纸牌游戏
2020/03/16 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
探寻python多线程ctrl+c退出问题解决方案
2014/10/23 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
YOINS官网:时尚女装网上购物
2017/03/17 全球购物
英国珠宝网站Argento: PANDORA、Olivia Burton和Nomination等
2020/05/08 全球购物
2014年机关植树节活动方案
2014/02/27 职场文书
2014年平安夜寄语
2014/12/08 职场文书
高中化学教学反思
2016/02/22 职场文书
大学生如何逃脱“毕业季创业队即散伙”魔咒?
2019/08/19 职场文书
纯html+css实现打字效果
2021/08/02 HTML / CSS