BP 神经网络的简单实现

from keras.models import Sequential #导入模型
from keras.layers.core import Dense #导入常用层
train_x,train_y #训练集
test_x,text_y #测试集
model=Sequential() #初始化模型
model.add(Dense(3,input_shape=(32,),activation='sigmoid',init='uniform'))) #添加一个隐含层,注:只是第一个隐含层需指定input_dim
model.add(Dense(1,activation='sigmoid')) #添加输出层
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy']) # 编译,指定目标函数与优化方法
model.fit(train_x,train_y ) # 模型训练
model.evaluate(test_x,text_y ) #模型测试

常用层

常用层对应于core模块,core内部定义了一系列常用的网络层,包括全连接、激活层等

Dense层

keras.layers.core.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

Dense就是常用的全连接层,所实现的运算是output = activation(dot(input, kernel)+bias)。其中activation是逐元素计算的激活函数,kernel是本层的权值矩阵,bias为偏置向量,只有当use_bias=True才会添加。

如果本层的输入数据的维度大于2,则会先被压为与kernel相匹配的大小。

#example

# as first layer in a sequential model:
| model = Sequential()
| model.add(Dense(32, input_shape=(16,)))
| # now the model will take as input arrays of shape (*, 16)
| # and output arrays of shape (*, 32)
|
| # after the first layer, you don't need to specify
| # the size of the input anymore:
| model.add(Dense(32))

Keras主要包括14个模块,本文主要对Models、layers、Initializations、Activations、Objectives、Optimizers、Preprocessing、metrics共计8个模块分别展开介绍。

1. Model 
包:keras.models 
这是Keras中最主要的一个模块,用于对各个组件进行组装 
eg:

from keras.models import Sequential
model=Sequential() #初始化模型
model.add(...) #可使用add方法组装组件

2. layers 
包:keras.layers 
该模块主要用于生成神经网络层,包含多种类型,如Core layers、Convolutional layers等 
eg:

from keras.layers import Dense #Dense表示Bp层
model.add(Dense(input_dim=3,output_dim=5)) #加入隐含层

3. Initializations 
包:keras.initializations 
该模块主要负责对模型参数(权重)进行初始化,初始化方法包括:uniform、lecun_uniform、normal、orthogonal、zero、glorot_normal、he_normal等 
详细说明:http://keras.io/initializations/ 
eg:

model.add(Dense(input_dim=3,output_dim=5,init='uniform')) #加入带初始化(uniform)的隐含层

4. Activations 
包:keras.activations、keras.layers.advanced_activations(新激活函数) 
该模块主要负责为神经层附加激活函数,如linear、sigmoid、hard_sigmoid、tanh、softplus、relu、 softplus以及LeakyReLU等比较新的激活函数 
详细说明:http://keras.io/activations/ 
eg:

model.add(Dense(input_dim=3,output_dim=5,activation='sigmoid')) 加入带激活函数(sigmoid)的隐含层

Equal to:

model.add(Dense(input_dim=3,output_dim=5))
model.add(Activation('sigmoid'))

5. Objectives 
包:keras.objectives 
该模块主要负责为神经网络附加损失函数,即目标函数。如mean_squared_error,mean_absolute_error ,squared_hinge,hinge,binary_crossentropy,categorical_crossentropy等,其中binary_crossentropy,categorical_crossentropy是指logloss 
注:目标函数的设定是在模型编译阶段 
详细说明:http://keras.io/objectives/ 
eg:

 model.compile(loss='binary_crossentropy', optimizer='sgd') #loss是指目标函数

6. Optimizers 
包:keras.optimizers 
该模块主要负责设定神经网络的优化方法,如sgd。 
注:优化函数的设定是在模型编译阶段 
详细说明:http://keras.io/optimizers/ 
eg:

model.compile(loss='binary_crossentropy', optimizer='sgd') #optimizer是指优化方法

7. Preprocessing 
包:keras.preprocessing.(image\sequence\text) 
数据预处理模块,不过本人目前尚未用过

8. metrics 
包:keras.metrics 
与sklearn中metrics包基本相同,主要包含一些如binary_accuracy、mae、mse等的评价方法 
eg:

predict=model.predict_classes(test_x) #输出预测结果
keras.metrics.binary_accuracy(test_y,predict) #计算预测精度

  

  

Keras实现简单BP神经网络的更多相关文章

  1. Numpy实现简单BP神经网络识别手写数字

    本文将用Numpy实现简单BP神经网络完成对手写数字图片的识别,数据集为42000张带标签的28x28像素手写数字图像.在计算机完成对手写数字图片的识别过程中,代表图片的28x28=764个像素的特征 ...

  2. 使用TenforFlow 搭建BP神经网络拟合二次函数

    使用简单BP神经网络拟合二次函数 当拥有两层神经元时候,拟合程度明显比一层好 并出现如下警告: C:\Program Files\Python36\lib\site-packages\matplotl ...

  3. python手写bp神经网络实现人脸性别识别1.0

    写在前面:本实验用到的图片均来自google图片,侵删! 实验介绍 用python手写一个简单bp神经网络,实现人脸的性别识别.由于本人的机器配置比较差,所以无法使用网上很红的人脸大数据数据集(如lf ...

  4. 基于BP神经网络的简单字符识别算法自小结(C语言版)

    本文均属自己阅读源代码的点滴总结.转账请注明出处谢谢. 欢迎和大家交流.qq:1037701636 email:gzzaigcn2009@163.com 写在前面的闲话: 自我感觉自己应该不是一个非常 ...

  5. 练习推导一个最简单的BP神经网络训练过程【个人作业/数学推导】

    写在前面   各式资料中关于BP神经网络的讲解已经足够全面详尽,故不在此过多赘述.本文重点在于由一个"最简单"的神经网络练习推导其训练过程,和大家一起在练习中一起更好理解神经网络训 ...

  6. 简单单层bp神经网络

    单层bp神经网络是解决线性可回归问题的. 该代码是论文:https://medium.com/technology-invention-and-more/how-to-build-a-simple-n ...

  7. 简单易学的机器学习算法——神经网络之BP神经网络

    一.BP神经网络的概念     BP神经网络是一种多层的前馈神经网络,其基本的特点是:信号是前向传播的,而误差是反向传播的.详细来说.对于例如以下的仅仅含一个隐层的神经网络模型: watermark/ ...

  8. BP神经网络原理及python实现

    [废话外传]:终于要讲神经网络了,这个让我踏进机器学习大门,让我读研,改变我人生命运的四个字!话说那么一天,我在乱点百度,看到了这样的内容: 看到这么高大上,这么牛逼的定义,怎么能不让我这个技术宅男心 ...

  9. BP神经网络

    秋招刚结束,这俩月没事就学习下斯坦福大学公开课,想学习一下深度学习(这年头不会DL,都不敢说自己懂机器学习),目前学到了神经网络部分,学习起来有点吃力,把之前学的BP(back-progagation ...

随机推荐

  1. Linux更改中国时区

    执行tzselect命令-->选择Asia-->选择China-->选择east China - Beijing, ->然后输入1 再执行 ln -sf /usr/share/ ...

  2. 步步入佳境---UI入门(2)

    一,刚开始练习UI的时候,一般是在- (void)viewDidLoad方法中写代码测试,例如:- (void)viewDidLoad{    CGRect rect=CGRectMake(0, 0, ...

  3. SSH 获取GET/POST参数

    在做项目的API通知接口的时候,发现在SSH框架中无法获取到对方服务器发来的异步通知信息.最后排查到的原因可能是struts2对HttpServletRequest进行了二次处理,那么该如何拿到pos ...

  4. 京东Java面试题(一)

    1.说一下java类集2.字符串哈西相等,equals相等吗?反过来呢?3.Spring的工作原理,控制控制反转是怎么实现的,自己写过滤器过滤编码怎么实现4.框架的源码有没有看过5.动态代理是怎么实现 ...

  5. 6.1 socket 长连接、短连接

    一般情况下,服务器的长连接和短连接不是服务器说了算,而是客户端说了算.因为服务器是给别人提供业务的,一旦连接建立起来之后,服务器端不会主动把连接给close掉. 客户端发送一笔业务,没有关闭连接,然后 ...

  6. Word Embeddings

    能够充分意识到W的这些属性不过是副产品而已是很重要的.我们没有尝试着让相似的词离得近.我们没想把类比编码进不同的向量里.我们想做的不过是一个简单的任务,比如预测一个句子是不是成立的.这些属性大概也就是 ...

  7. PDB调试模块

    这里主要是一些对于调试常用的命令:1.直接通过命令端输入进行调试 以pdb调试模式运行(主要用这个) python3 -m pdb file.py 2.在代码中导入pdb模块 import pdb 功 ...

  8. 王垠:完全用Linux工作 - imsoft.cnblogs

    完全用Linux工作,抛弃windows 我已经半年没有使用 Windows 的方式工作了.Linux 高效的完成了我所有的工作. GNU/Linux 不是每个人都想用的.如果你只需要处理一般的事务, ...

  9. HDU 3068 最长回文 manacher 算法,基本上是O(n)复杂度

    下面有别人的比较详细的解题报告: http://wenku.baidu.com/view/3031d2d3360cba1aa811da42.html 下面贴我的代码,注释在代码中: #include ...

  10. ppt罗列项排版

    关于罗列项的排版(1,....2,......3,......4,........)