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之类的细节
Oct 13 Python
举例讲解Python中的list列表数据结构用法
Mar 12 Python
图文详解WinPE下安装Python
May 17 Python
Python中内置的日志模块logging用法详解
Jul 12 Python
python制作爬虫爬取京东商品评论教程
Dec 16 Python
用python写扫雷游戏实例代码分享
May 27 Python
Python实现查找数组中任意第k大的数字算法示例
Jan 23 Python
对python中if语句的真假判断实例详解
Feb 18 Python
Python Datetime模块和Calendar模块用法实例分析
Apr 15 Python
python获取地震信息 微信实时推送
Jun 18 Python
Python列表与元组的异同详解
Jul 02 Python
详解基于python的多张不同宽高图片拼接成大图
Sep 26 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查看session内容的函数
2008/08/27 PHP
最新的php 文件上传模型,支持多文件上传
2009/08/13 PHP
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
详解php用static方法的原因
2018/09/12 PHP
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
验证码在IE中不刷新而谷歌等浏览器正常的解决方案
2014/03/18 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
浅谈jQuery事件绑定原理
2015/01/02 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
jackson解析json字符串,首字母大写会自动转为小写的方法
2017/12/22 Javascript
vscode中Vue别名路径提示的实现
2020/07/31 Javascript
python统计日志ip访问数的方法
2015/07/06 Python
在Python的Flask框架中验证注册用户的Email的方法
2015/09/02 Python
Python中max函数用于二维列表的实例
2018/04/03 Python
Python 中的lambda函数介绍
2018/10/10 Python
Python基础知识点 初识Python.md
2019/05/14 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
Python爬虫教程之利用正则表达式匹配网页内容
2020/12/08 Python
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
高级Java程序员面试要点
2013/08/02 面试题
为什么要使用servlet
2016/01/17 面试题
党支部书记先进事迹
2014/01/17 职场文书
学术会议邀请函范文
2014/01/22 职场文书
双创工作实施方案
2014/03/26 职场文书
诚信考试倡议书
2014/04/15 职场文书
土建施工员岗位职责
2014/07/16 职场文书
高三语文教学反思
2016/02/16 职场文书
爱岗敬业先进典型事迹材料(2016推荐版)
2016/02/26 职场文书
react 路由Link配置详解
2021/11/11 Javascript
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL