Python实现的递归神经网络简单示例


Posted in Python onAugust 11, 2017

本文实例讲述了Python实现的递归神经网络。分享给大家供大家参考,具体如下:

# Recurrent Neural Networks
import copy, numpy as np
np.random.seed(0)
# compute sigmoid nonlinearity
def sigmoid(x):
  output = 1/(1+np.exp(-x))
  return output
# convert output of sigmoid function to its derivative
def sigmoid_output_to_derivative(output):
  return output*(1-output)
# training dataset generation
int2binary = {}
binary_dim = 8
largest_number = pow(2,binary_dim)
binary = np.unpackbits(
  np.array([range(largest_number)],dtype=np.uint8).T,axis=1)
for i in range(largest_number):
  int2binary[i] = binary[i]
# input variables
alpha = 0.1
input_dim = 2
hidden_dim = 16
output_dim = 1
# initialize neural network weights
synapse_0 = 2*np.random.random((input_dim,hidden_dim)) - 1
synapse_1 = 2*np.random.random((hidden_dim,output_dim)) - 1
synapse_h = 2*np.random.random((hidden_dim,hidden_dim)) - 1
synapse_0_update = np.zeros_like(synapse_0)
synapse_1_update = np.zeros_like(synapse_1)
synapse_h_update = np.zeros_like(synapse_h)
# training logic
for j in range(10000):
  # generate a simple addition problem (a + b = c)
  a_int = np.random.randint(largest_number/2) # int version
  a = int2binary[a_int] # binary encoding
  b_int = np.random.randint(largest_number/2) # int version
  b = int2binary[b_int] # binary encoding
  # true answer
  c_int = a_int + b_int
  c = int2binary[c_int]
  # where we'll store our best guess (binary encoded)
  d = np.zeros_like(c)
  overallError = 0
  layer_2_deltas = list()
  layer_1_values = list()
  layer_1_values.append(np.zeros(hidden_dim))
  # moving along the positions in the binary encoding
  for position in range(binary_dim):
    # generate input and output
    X = np.array([[a[binary_dim - position - 1],b[binary_dim - position - 1]]])
    y = np.array([[c[binary_dim - position - 1]]]).T
    # hidden layer (input ~+ prev_hidden)
    layer_1 = sigmoid(np.dot(X,synapse_0) + np.dot(layer_1_values[-1],synapse_h))
    # output layer (new binary representation)
    layer_2 = sigmoid(np.dot(layer_1,synapse_1))
    # did we miss?... if so, by how much?
    layer_2_error = y - layer_2
    layer_2_deltas.append((layer_2_error)*sigmoid_output_to_derivative(layer_2))
    overallError += np.abs(layer_2_error[0])
    # decode estimate so we can print(it out)
    d[binary_dim - position - 1] = np.round(layer_2[0][0])
    # store hidden layer so we can use it in the next timestep
    layer_1_values.append(copy.deepcopy(layer_1))
  future_layer_1_delta = np.zeros(hidden_dim)
  for position in range(binary_dim):
    X = np.array([[a[position],b[position]]])
    layer_1 = layer_1_values[-position-1]
    prev_layer_1 = layer_1_values[-position-2]
    # error at output layer
    layer_2_delta = layer_2_deltas[-position-1]
    # error at hidden layer
    layer_1_delta = (future_layer_1_delta.dot(synapse_h.T) + layer_2_delta.dot(synapse_1.T)) * sigmoid_output_to_derivative(layer_1)
    # let's update all our weights so we can try again
    synapse_1_update += np.atleast_2d(layer_1).T.dot(layer_2_delta)
    synapse_h_update += np.atleast_2d(prev_layer_1).T.dot(layer_1_delta)
    synapse_0_update += X.T.dot(layer_1_delta)
    future_layer_1_delta = layer_1_delta
  synapse_0 += synapse_0_update * alpha
  synapse_1 += synapse_1_update * alpha
  synapse_h += synapse_h_update * alpha
  synapse_0_update *= 0
  synapse_1_update *= 0
  synapse_h_update *= 0
  # print(out progress)
  if j % 1000 == 0:
    print("Error:" + str(overallError))
    print("Pred:" + str(d))
    print("True:" + str(c))
    out = 0
    for index,x in enumerate(reversed(d)):
      out += x*pow(2,index)
    print(str(a_int) + " + " + str(b_int) + " = " + str(out))
    print("------------")

运行输出:

Error:[ 3.45638663]
Pred:[0 0 0 0 0 0 0 1]
True:[0 1 0 0 0 1 0 1]
9 + 60 = 1
------------
Error:[ 3.63389116]
Pred:[1 1 1 1 1 1 1 1]
True:[0 0 1 1 1 1 1 1]
28 + 35 = 255
------------
Error:[ 3.91366595]
Pred:[0 1 0 0 1 0 0 0]
True:[1 0 1 0 0 0 0 0]
116 + 44 = 72
------------
Error:[ 3.72191702]
Pred:[1 1 0 1 1 1 1 1]
True:[0 1 0 0 1 1 0 1]
4 + 73 = 223
------------
Error:[ 3.5852713]
Pred:[0 0 0 0 1 0 0 0]
True:[0 1 0 1 0 0 1 0]
71 + 11 = 8
------------
Error:[ 2.53352328]
Pred:[1 0 1 0 0 0 1 0]
True:[1 1 0 0 0 0 1 0]
81 + 113 = 162
------------
Error:[ 0.57691441]
Pred:[0 1 0 1 0 0 0 1]
True:[0 1 0 1 0 0 0 1]
81 + 0 = 81
------------
Error:[ 1.42589952]
Pred:[1 0 0 0 0 0 0 1]
True:[1 0 0 0 0 0 0 1]
4 + 125 = 129
------------
Error:[ 0.47477457]
Pred:[0 0 1 1 1 0 0 0]
True:[0 0 1 1 1 0 0 0]
39 + 17 = 56
------------
Error:[ 0.21595037]
Pred:[0 0 0 0 1 1 1 0]
True:[0 0 0 0 1 1 1 0]
11 + 3 = 14
------------

英文原文:https://iamtrask.github.io/2015/11/15/anyone-can-code-lstm/

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python正则匹配查询港澳通行证办理进度示例分享
Dec 27 Python
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
Mar 30 Python
Python处理文本换行符实例代码
Feb 03 Python
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
Python 格式化打印json数据方法(展开状态)
Feb 27 Python
Python基于codecs模块实现文件读写案例解析
May 11 Python
Python实现ElGamal加密算法的示例代码
Jun 19 Python
Python基于httpx模块实现发送请求
Jul 07 Python
Python3爬虫关于识别检验滑动验证码的实例
Jul 30 Python
Python3基于plotly模块保存图片表格
Aug 03 Python
Python爬虫新手入门之初学lxml库
Dec 20 Python
浅析python中特殊文件和特殊函数
Feb 24 Python
Python调用系统底层API播放wav文件的方法
Aug 11 #Python
Django 导出 Excel 代码的实例详解
Aug 11 #Python
python技能之数据导出excel的实例代码
Aug 11 #Python
利用标准库fractions模块让Python支持分数类型的方法详解
Aug 11 #Python
Python对字符串实现去重操作的方法示例
Aug 11 #Python
python中模块查找的原理与方法详解
Aug 11 #Python
python利用lxml读写xml格式的文件
Aug 10 #Python
You might like
长波知识介绍
2021/03/01 无线电
header()函数使用说明
2006/11/23 PHP
php cookie 登录验证示例代码
2009/03/16 PHP
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
Javascript 强制类型转换函数
2009/05/17 Javascript
模仿jQuery each函数的链式调用
2009/07/22 Javascript
javascript 动态生成私有变量访问器
2009/12/06 Javascript
js实现点小图看大图效果的思路及示例代码
2013/10/28 Javascript
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
Python学习之asyncore模块用法实例教程
2014/09/29 Python
Python 爬虫图片简单实现
2017/06/01 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
Python接口测试get请求过程详解
2020/02/28 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
澳大利亚在线消费电子产品商店:TobyDeals
2020/01/05 全球购物
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
2014端午节活动策划方案
2014/01/27 职场文书
喜之郎果冻广告词
2014/03/20 职场文书
幼儿园老师寄语
2014/04/03 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
出纳试用期自我鉴定范文
2014/09/16 职场文书
检查机关领导群众路线教育实践活动个人整改措施
2014/10/28 职场文书
浅谈mysql增加索引不生效的几种情况
2021/06/23 MySQL
vue3 自定义图片放大器效果的示例代码
2022/07/23 Vue.js