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中enumerate函数遍历元素用法分析
Mar 11 Python
整理Python 常用string函数(收藏)
May 30 Python
用tensorflow构建线性回归模型的示例代码
Mar 05 Python
Python对CSV、Excel、txt、dat文件的处理
Sep 18 Python
Django 实现购物车功能的示例代码
Oct 08 Python
浅谈Python接口对json串的处理方法
Dec 19 Python
python实现计数排序与桶排序实例代码
Mar 28 Python
python redis连接 有序集合去重的代码
Aug 04 Python
Python使用type动态创建类操作示例
Feb 29 Python
Python restful框架接口开发实现
Apr 13 Python
5款实用的python 工具推荐
Oct 13 Python
Python Process创建进程的2种方法详解
Jan 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
php empty函数 使用说明
2009/08/10 PHP
PHP中的类型提示(type hinting)功能介绍
2015/07/01 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
php进行ip地址掩码运算处理的方法
2016/07/11 PHP
php集成动态口令认证
2016/07/21 PHP
php中final关键字用法分析
2016/12/07 PHP
javascript for循环设法提高性能
2010/02/24 Javascript
jquery键盘事件介绍
2011/01/31 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
原生js封装自定义滚动条
2017/03/24 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
bootstrap日期插件daterangepicker使用详解
2017/10/19 Javascript
详解如何在angular2中获取节点
2017/11/23 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
2018/03/01 Javascript
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
[04:52]DOTA2亚洲邀请赛附加赛 TOP10精彩集锦
2015/01/29 DOTA
python在线编译器的简单原理及简单实现代码
2018/02/02 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
在PyCharm中实现关闭一个死循环程序的方法
2018/11/29 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
python MD5加密的示例
2020/10/19 Python
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
公务员职业生涯规划书范文  
2014/01/19 职场文书
高中生操行评语大全
2014/04/25 职场文书
大专毕业生求职信
2014/07/05 职场文书
学校社团活动总结
2015/05/07 职场文书
信用卡催款律师函
2015/05/27 职场文书
结婚典礼主持词
2015/06/29 职场文书