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 用for循环实现1~n求和的实例
Feb 01 Python
浅谈python常用程序算法
Mar 22 Python
python dlib人脸识别代码实例
Apr 04 Python
Python Django Vue 项目创建过程详解
Jul 29 Python
python使用 request 发送表单数据操作示例
Sep 25 Python
python语言线程标准库threading.local解读总结
Nov 10 Python
Python实现图片识别加翻译功能
Dec 26 Python
如何理解Python中的变量
Jun 01 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
Jun 08 Python
python实现人性化显示金额数字实例详解
Sep 25 Python
Python 中 Shutil 模块详情
Nov 11 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Apr 11 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
DIY实用性框形天线
2021/03/02 无线电
php中对2个数组相加的函数
2011/06/24 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
2018/12/05 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
巧用Javascript的逻辑运算符
2016/12/02 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
2018/12/13 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
Python内置函数reversed()用法分析
2018/03/20 Python
Python对HTML转义字符进行反转义的实现方法
2019/04/28 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
2020/03/06 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
pycharm中选中一个单词替换所有重复单词的实现方法
2020/11/17 Python
Python实现自动整理文件的脚本
2020/12/17 Python
师范生实习个人的自我评价
2013/09/28 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
2014年仓库保管员工作总结
2014/12/03 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python