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登录QQ邮箱发信的实现代码
Feb 10 Python
用Python和MD5实现网站挂马检测程序
Mar 13 Python
django自定义Field实现一个字段存储以逗号分隔的字符串
Apr 27 Python
给Python入门者的一些编程建议
Jun 15 Python
numpy中矩阵合并的实例
Jun 15 Python
Python简单I/O操作示例
Mar 18 Python
python科学计算之narray对象用法
Nov 25 Python
安装PyInstaller失败问题解决
Dec 14 Python
tensorboard实现同时显示训练曲线和测试曲线
Jan 21 Python
django在保存图像的同时压缩图像示例代码详解
Feb 11 Python
Python逐行读取文件内容的方法总结
Feb 14 Python
python中Mako库实例用法
Dec 31 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 从一个数组中随机的取出若干个不同的数实例
2016/12/31 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
用apply让javascript函数仅执行一次的代码
2010/06/27 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
2013/01/04 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
javascript中使用未定义变量或值的情况分析
2016/07/19 Javascript
js图片放大镜效果实现方法详解
2020/10/28 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
2017/08/10 jQuery
清空元素html("") innerHTML="" 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
js判断传入时间和当前时间大小实例(超简单)
2018/01/11 Javascript
element-ui表格列金额显示两位小数的方法
2018/08/24 Javascript
解决Vue 项目打包后favicon无法正常显示的问题
2018/09/01 Javascript
vue 引用自定义ttf、otf、在线字体的方法
2019/05/09 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
python机器学习之贝叶斯分类
2018/03/26 Python
Python中@property的理解和使用示例
2019/06/11 Python
How TDD works
2012/09/30 面试题
自我评价中英文语句
2013/11/30 职场文书
高中生的自我评价
2014/03/04 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
2014年宣传工作总结
2014/11/18 职场文书
试用期工作表现自我评价
2015/03/06 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
关于党风廉政建设宣传教育月的活动总结!
2019/08/08 职场文书
导游词之南京栖霞山
2019/10/18 职场文书