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 相关文章推荐
用TensorFlow实现lasso回归和岭回归算法的示例
May 02 Python
python 与服务器的共享文件夹交互方法
Dec 27 Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 Python
Python生成MD5值的两种方法实例分析
Apr 26 Python
Python基础知识点 初识Python.md
May 14 Python
详解python websocket获取实时数据的几种常见链接方式
Jul 01 Python
python实现机器人卡牌
Oct 06 Python
python+mysql实现个人论文管理系统
Oct 25 Python
解决Python数据可视化中文部分显示方块问题
May 16 Python
Python类super()及私有属性原理解析
Jun 15 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
用python对excel进行操作(读,写,修改)
Dec 25 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
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
php基于str_pad实现卡号不足位数自动补0的方法
2014/11/12 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
CSS3+JavaScript实现翻页幻灯片效果
2017/06/28 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
nodejs中request库使用HTTPS代理的方法
2019/04/30 NodeJs
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
Javascript实现秒表计时游戏
2020/05/27 Javascript
python中日期和时间格式化输出的方法小结
2015/03/19 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
Python collections模块使用方法详解
2019/08/28 Python
使用pytorch完成kaggle猫狗图像识别方式
2020/01/10 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
一文解决django 2.2与mysql兼容性问题
2020/07/15 Python
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
Free People中国官网:波西米亚风格女装服饰
2016/08/30 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
考博自荐信
2013/10/25 职场文书
最新教师自我评价分享
2013/11/12 职场文书
企业文化演讲稿
2014/05/20 职场文书
物业前台接待岗位职责
2015/04/03 职场文书
爱国主义影片观后感
2015/06/18 职场文书
团队拓展训练心得体会
2016/01/12 职场文书
新手开公司创业注意事项有哪些?
2019/07/29 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android
Kubernetes部署实例并配置Deployment、网络映射、副本集
2022/04/01 Servers
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫