普通神经网络和RNN简单demo (一)
2017-08-04
花了两天时间看了下神经网络的一点基础知识,包括单层的感知机模型,普通的没有记忆功能的多层神经网咯,还有递归神经网络RNN。这里主要是参考了一个博客,实现了几个简单的代码,这里把源地址给出来,还有几个我觉的不错的神经网络的入门资源:
https://iamtrask.github.io/2015/11/15/anyone-can-code-lstm/ 这个是我的代码参考连接
https://github.com/kjw0612/awesome-rnn 这个是github上被人整理的RNN资源汇总,相当的丰富
http://cs231n.stanford.edu/2016/syllabus.html 这是李菲菲教授的课程讲授 CNN,有很多的资料,视频在youtube上有,暂时没有2017的
1.简单神经网络实现(没有隐层hidden layer)
模型: 输出有第一列决定(也可以改为由第二列或者其他的决定,修改相应的y就行)
# -*- coding: utf-8 -*- '''
function:
note: 1.系统只有输入层和输出层,没有隐层;
2.这里神经网络要训练的模型是:有几个输入特征,但是输出只和第二个特征有关(也可以改成之和第一个
有关系试试~);
3.
date: 2017.8.5
''' import numpy as np #sigmoid functoin: map the output to probability
def sigmoid(x):
output = 1 / (1 + np.exp(-x))
return output #derivation of sigmoid function
def sigmoid_Derivation(x):
output = sigmoid(x) * (1 - sigmoid(x))
#output = x * (1-x)
return output # initialize the matrix randomly,syn0 between the input and output layer
np.random.seed(1)
syn0 = 2*np.random.random((3,1)) - 1 # 3*1 vector 神经网络的核心,连接输入层和输出层,完成反馈 x = np.array([[0,0,1], #x 4*3 matrix 一行代表一次输入数据,所以是三个特征输入
[0,1,1],
[1,0,1],
[1,1,1]]) # y = np.array([[0], # y 4*1 vector 每行代表一次输入的输出
# [0],
# [1],
# [1]]) y = np.array([[0,1,0,1]]).T #设置迭代次数#如果是python 2 可以用xrange(100000)
for iter in range(1000): #input layer, output layer
l0 = x #数组可以直接复制,和list不一样
l1 = sigmoid(np.dot(l0,syn0)) #点积 4*1 vector 输出层,用sigmoid函数将y转化为0~1之间,否则可能大于1 #calculate the error
l1_error = y - l1 # 4*1 vector #reduce the error of high confidence
l1_delta = l1_error * sigmoid_Derivation(l1) #接近0或者1的sigmoid导数很小,所以就降低了对应的差错 #update the matrix
syn0 += np.dot(l0.T, l1_delta) #print some info
print('correct output:')
print(y) print('output after training: ')
print(l1) print('error: ')
print(l1_error)
2.有一个隐层的神经网络
模型:输出由前两个特征决定:
# -*- coding: utf-8 -*- '''
note : 1.系统含有一个隐层,采用后向传播训练(应该是的吧..);
2.神经网络训练的模型是:输出 = 前两个特征的和 date: 2017.8.5
''' import numpy as np
#sigmoid function,map output to (0~1)
def sigmoid(x):
output = 1 / (1 + np.exp(-x))
return output #derivation of sigmoid function
def sigmoid_derivation(x):
output = sigmoid(x) * (1 - sigmoid(x))
return output #input x,
x = np.array([[0,0,1],
[0,1,1],
[1,0,1],
[1,1,1]]) y = np.array([[0,1,1,0]]).T #correct output 4*1 #initialize the neaurla network matrix syn0,syn1
np.random.seed(1)
syn0 = 2*np.random.random((3,4))-1 #连接input layer ,hidden layer,输入层三个单元隐层四个单元,所以3*4 syn1 = 2*np.random.random((4,1))-1 #连接hidden layer and output layer,隐层四个输出层一个单元 #times we train the network
for iter in range(60000): #input layer,hidden layer,output layer
l0 = x
l1 = sigmoid(np.dot(l0,syn0)) #4*4 hidden layer
l2 = sigmoid(np.dot(l1,syn1)) #4*1 output layer #how big the error is
l2_error = y - l2 #输出层错误 计算错误需要从后向前
l2_delta = l2_error * sigmoid_derivation(l2) #减小偏差小的错误,相应参数更新会比较小 #l1_error = np.dot(syn1.T,l2_delta) #4*1 隐层的偏差从输出层传递过来
l1_error = l2_delta.dot(syn1.T) #4 * 4
l1_delta = l1_error * sigmoid_derivation(l1) #update the matrix syn0,syn1
syn0 += np.dot(l0.T,l1_delta)
syn1 += np.dot(l1.T,l2_delta) #print some info
print('output after training')
print(l2) print('correct answer')
print(y)
迭代次数对结果的影响很大,直观的感受就是下面这个图。分别是迭代次数为 1000, 10000, 60000
刚刚开始i还以为哪里的参数有问题,改了迭代次数明显就效果更好了,也就是对结果的预测更加准确了。

3.RNN(隐层的数据来源包括上个时间戳的隐层和当前的输入)
注意:
1).这里和前面有一个隐层的区别在于,这里隐层的输出不仅是input layer,还有上一个时间戳的隐层输出,也是作为这个隐层的输入。
2).这里说的上个时间戳隐层的输出layer_1作为这个时刻隐层的输入,不是指output layer 的输出,因为layer_1 =sigmoid( np.dot(layer_0,syn0) + np.dot(layer_1_values[-1], syn_h))
但是 output layer 的输出为:
layer_2 = sigmoid(np.dot(layer_1, syn1))所以不能混淆;
3)这里采用模型是计算二进制加法 a + b = c;训练模型,让它找到这个加法的规律,从而给定两个数就可以计算二进制的和。
因为RNN是对时间序列有一定的记忆能力,所以在不同次的训练的时候,就是不同的时间戳。
这里截图表示是否把上个时间戳的隐层输出作为此刻隐层输入的区别:

从图中可以看出,如果仅仅考虑输入层作为当前隐层输入,那么前面的信息就全部丢失了,考虑到以前的信息可能对以后的决策有帮助,采用RNN是一个比较好的策略。
代码下次补上
普通神经网络和RNN简单demo (一)的更多相关文章
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN,LSTM
http://cs231n.github.io/neural-networks-1 https://arxiv.org/pdf/1603.07285.pdf https://adeshpande3.g ...
- 大话循环神经网络(RNN)
在上一篇文章中,介绍了 卷积神经网络(CNN)的算法原理,CNN在图像识别中有着强大.广泛的应用,但有一些场景用CNN却无法得到有效地解决,例如: 语音识别,要按顺序处理每一帧的声音信息,有些结果 ...
- 循环神经网络LSTM RNN回归:sin曲线预测
摘要:本篇文章将分享循环神经网络LSTM RNN如何实现回归预测. 本文分享自华为云社区<[Python人工智能] 十四.循环神经网络LSTM RNN回归案例之sin曲线预测 丨[百变AI秀]& ...
- 【学习笔记】循环神经网络(RNN)
前言 多方寻找视频于博客.学习笔记,依然不能完全熟悉RNN,因此决定还是回到书本(<神经网络与深度学习>第六章),一点点把啃下来,因为这一章对于整个NLP学习十分重要,我想打好基础. 当然 ...
- 设计模式之单例模式的简单demo
/* * 设计模式之单例模式的简单demo */ class Single { /* * 创建一个本类对象. * 和get/set方法思想一样,类不能直接调用对象 * 所以用private限制权限 * ...
- Spring的简单demo
---------------------------------------- 开发一个Spring的简单Demo,具体的步骤如下: 1.构造一个maven项目 2.在maven项目的pom.xml ...
- 使用Spring缓存的简单Demo
使用Spring缓存的简单Demo 1. 首先创建Maven工程,在Pom中配置 <dependency> <groupId>org.springframework</g ...
- Managed DirectX中的DirectShow应用(简单Demo及源码)
阅读目录 介绍 准备工作 环境搭建 简单Demo 显示效果 其他 Demo下载 介绍 DirectX是Microsoft开发的基于Windows平台的一组API,它是为高速的实时动画渲染.交互式音乐和 ...
- angular实现了一个简单demo,angular-weibo-favorites
前面必须说一段 帮客户做了一个过渡期的项目,唯一的要求就是速度,我只是会点儿基础的php,于是就用tp帮客户做了这个项目.最近和客户架构沟通,后期想把项目重新做一下,就用现在最流行的技术,暂时想的使用 ...
随机推荐
- PHP中MVC的编程思想浅谈
我相信这样的文章已经被写烂了,但是我今天还是愿意冒着风险把自己的经验与大家分享一下.纯属原创,我也没什么可保留,希望对新手有帮助,有说的什么不对的地方,欢迎大家伙吐槽. 什么是MVC? 简单的说就是将 ...
- gridgroup行内编辑删除
Ext.define('Task', { extend: 'Ext.data.Model', idProperty: 'taskId', fields: [ { name: 'projectId', ...
- 持续集成 解决 Jenkins 中无法展示 HTML 样式的问题
对于测试报告来说,除了内容的简洁精炼,样式的美观也很重要.常用的做法是,采用HTML格式的文档,并搭配CSS和JS,实现自定义的样式和动画效果(例如展开.折叠等). 在Jenkins中要展示HTML文 ...
- C2 CompilerThread0 如果抓到的java线程dump里占用CPU最高的线程是这个,99%可能是因为服务重启了
"C2 CompilerThread0" #5 daemon prio=9 os_prio=0 tid=0x00007f20c80b3800 nid=0x57c0 runnable ...
- Unity3D delegate 用法
delegate:委托机制,不做一一说明: 功能需求1: 音量,为一事件为B: 改变音量如为0,为事件A.也触发事件B: 音量变,所有音乐,如场景,特效,角色,打斗.其所有音量都得变.为C: 思路: ...
- IOS学习笔记(五)——UI基础UIWindow、UIView
在PC中,应用程序多是使用视窗的形式显示内容,手机应用也不例外,手机应用中要在屏幕上显示内容首先要创建一个窗口承载内容,iOS应用中使用UIWindow.UIView来实现内容显示. UIWindow ...
- SonarQube 平台搭建
1. 前期准备 ① 环境 jdk 1.8 配置(见其他随笔) MySQL 5.7(见其他随笔) ② 工具下载 sonarqube 下载 <链接:https://pan.baidu.com/s/1 ...
- Service Name Port Number Transport Protocol tcp udp 端口号16bit
https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol The DHCP employs a connectionless ...
- PHP定界符{}的作用
说明: PHP解析一个字符串为"Hello,$World"时会自动解析$World. {}是方便让PHP更快的查找,它告诉PHP这里面就是变量,不用再判断是否是变量了. 例子: $ ...
- 斯坦福大学Andrew Ng - 机器学习笔记(2) -- 逻辑回归 & 正则化
大概用了一个月,Andrew Ng老师的机器学习视频断断续续看完了,以下是个人学习笔记,入门级别,权当总结.笔记难免有遗漏和误解,欢迎讨论. 鸣谢:中国海洋大学黄海广博士提供课程视频和个人笔记,在此深 ...