keras是一个开源是的python深度学习库,可以基于theano或者tenserflow,下面大体介绍下keras的几个重要模块。

重要的模块

1、优化器(optimizers)

优化器是调整每个节点权重的方法,看一个代码示例:

?

1

2

3

4

model = Sequential()

model.add(Dense(64, init='uniform', input_dim=10)) model.add(Activation('tanh'))

model.add(Activation('softmax'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) model.compile(loss='mean_squared_error', optimizer=sgd)

可以看到优化器在模型编译前定义,作为编译时的两个参数之一

代码中的sgd是随机梯度下降算法

lr表示学习速率

momentum表示动量项

decay是学习速率的衰减系数(每个epoch衰减一次)

Nesterov的值是False或者True,表示使不使用Nesterov momentum

以上4个参数以后具体学习了再解析

除了sgd,还可以选择的优化器有RMSprop(适合递归神经网络)、Adagrad、Adadelta、Adam、Adamax、Nadam

2、目标函数(objectives)

目标函数又称损失函数(loss),目的是计算神经网络的输出与样本标记的差的一种方法,代码示例:

?

1

2

3

4

model = Sequential()

model.add(Dense(64, init='uniform', input_dim=10)) model.add(Activation('tanh'))

model.add(Activation('softmax'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) model.compile(loss='mean_squared_error', optimizer=sgd)

mean_squared_error就是损失函数的名称

可以选择的损失函数有:

mean_squared_error,mean_absolute_error,squared_hinge,hinge,binary_crossentropy,categorical_crossentropy

这里binary_crossentropy 和 categorical_crossentropy也就是logloss

3、激活函数(activations)

每一个神经网络层都需要一个激活函数,代码示例:

?

1

2

3

4

5

6

7

8

from keras.layers.core import Activation, Dense

model.add(Dense(64))

model.add(Activation('tanh'))

或把上面两行合并为:

model.add(Dense(64, activation='tanh'))

可以选择的激活函数有:

linear、sigmoid、hard_sigmoid、tanh、softplus、relu、 softplus,softmax、softsign

还有一些高级激活函数,比如如PReLU,LeakyReLU等

4、参数初始化(Initializations)

这个模块的作用是在添加layer时调用init进行这一层的权重初始化,有两种初始化方法

4.1 通过制定初始化方法的名称:

示例代码:

?

1

model.add(Dense(64, init='uniform'))

可以选择的初始化方法有:

uniform、lecun_uniform、normal、orthogonal、zero、glorot_normal、he_normal等

4.2 通过调用对象:

该对象必须包含两个参数:shape(待初始化的变量的shape)和name(该变量的名字),该可调用对象必须返回一个(Keras)变量,例如K.variable()返回的就是这种变量,示例代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

from keras import backend as K

import numpy as np

def my_init(shape, name=None):

value = np.random.random(shape)

return K.variable(value, name=name)

model.add(Dense(64, init=my_init))

或者

from keras import initializations

def my_init(shape, name=None):

return initializations.normal(shape, scale=0.01, name=name)

model.add(Dense(64, init=my_init))

所以说可以通过库中的方法设定每一层的初始化权重,

也可以自己初始化权重,自己设定的话可以精确到每个节点的权重,

那么是否可以在这儿做文章优化特征呢?我觉得可以针对不同的task深入试验看看

5、层(layer)

keras的层主要包括:

常用层(Core)、卷积层(Convolutional)、池化层(Pooling)、局部连接层、递归层(Recurrent)、嵌入层( Embedding)、高级激活层、规范层、噪声层、包装层,当然也可以编写自己的层

5.1对于层的操作

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

layer.get_weights() #返回该层的权重

layer.set_weights(weights)#将权重加载到该层

config = layer.get_config()#保存该层的配置

layer = layer_from_config(config)#加载一个配置到该层

#该层有一个节点时,获得输入张量、输出张量、及各自的形状:

layer.input

layer.output

layer.input_shape

layer.output_shape

#该层有多个节点时(node_index为节点序号):

layer.get_input_at(node_index)

layer.get_output_at(node_index)

layer.get_input_shape_at(node_index)

layer.get_output_shape_at(node_index)

5.2 Dense层(全连接层)

?

1

keras.layers.core.Dense(output_dim, init='glorot_uniform', activation='linear', weights=None, W_regularizer=None, b_regularizer=None, activity_regularizer=None, W_constraint=None, b_constraint=None, bias=True, input_dim=None)

output_dim:输出数据的维度

init:初始化该层权重的方法

activation:该层的激活函数

weights:numpy array的list。该list应含有一个形如(input_dim,output_dim)的权重矩阵和一个形如(output_dim,)的偏置向量

regularizer:正则项,w为权重的、b为偏执的,activity为输出的

constraints:约束项

bias:是否包含偏执向量,是布尔值

input_dim:输入数据的维度

5.3 dropout层

keras.layers.core.Dropout(p)

为输入数据施加Dropout。Dropout将在训练过程中每次更新参数时随机断开一定百分比(p)的输入神经元连接,Dropout层用于防止过拟合。

参考文章:http://blog.csdn.net/stdcoutzyx/article/details/49022443理解dropout

5.4 递归层(Recurrent)

递归层包含三种模型:LSTM、GRU和SimpleRNN

5.4.1抽象层,不能直接使用

?

1

keras.layers.recurrent.Recurrent(weights=None, return_sequences=False, go_backwards=False, stateful=False, unroll=False, consume_less='cpu', input_dim=None, input_length=None)

return_sequences:True返回整个序列,false返回输出序列的最后一个输出

go_backwards:True,逆向处理输入序列,默认为False

stateful:布尔值,默认为False,若为True,则一个batch中下标为i的样本的最终状态将会用作下一个batch同样下标的样本的初始状态

5.4.2全连接RNN网络

?

1

keras.layers.recurrent.SimpleRNN(output_dim, init='glorot_uniform', inner_init='orthogonal', activation='tanh', W_regularizer=None, U_regularizer=None, b_regularizer=None, dropout_W=0.0, dropout_U=0.0)

inner_init:内部单元的初始化方法

dropout_W:0~1之间的浮点数,控制输入单元到输入门的连接断开比例

dropout_U:0~1之间的浮点数,控制输入单元到递归连接的断开比例

5.4.3 LSTM层

?

1

keras.layers.recurrent.LSTM(output_dim, init='glorot_uniform', inner_init='orthogonal', forget_bias_init='one', activation='tanh', inner_activation='hard_sigmoid', W_regularizer=None, U_regularizer=None, b_regularizer=None, dropout_W=0.0, dropout_U=0.0)

forget_bias_init:遗忘门偏置的初始化函数,Jozefowicz et al.建议初始化为全1元素

inner_activation:内部单元激活函数

5.5 Embedding层

?

1

keras.layers.embeddings.Embedding(input_dim, output_dim, init='uniform', input_length=None, W_regularizer=None, activity_regularizer=None, W_constraint=None, mask_zero=False, weights=None, dropout=0.0)

只能作为模型第一层

mask_zero:布尔值,确定是否将输入中的‘0’看作是应该被忽略的‘填充’(padding)值,该参数在使用递归层处理变长输入时有用。设置为True的话,模型中后续的层必须都支持masking,否则会抛出异常

5.6 model层(最重要)

model层是最主要的模块,model层可以将上面定义了各种基本组件组合起来

model的方法:

model.summary() : 打印出模型概况

model.get_config() :返回包含模型配置信息的Python字典

model.get_weights():返回模型权重张量的列表,类型为numpy array

model.set_weights():从numpy array里将权重载入给模型

model.to_json:返回代表模型的JSON字符串,仅包含网络结构,不包含权值。可以从JSON字符串中重构原模型:

?

1

2

3

4

from models import model_from_json

json_string = model.to_json()

model = model_from_json(json_string)

model.to_yaml:与model.to_json类似,同样可以从产生的YAML字符串中重构模型

?

1

2

3

4

from models import model_from_yaml

yaml_string = model.to_yaml()

model = model_from_yaml(yaml_string)

model.save_weights(filepath):将模型权重保存到指定路径,文件类型是HDF5(后缀是.h5)

model.load_weights(filepath, by_name=False):从HDF5文件中加载权重到当前模型中, 默认情况下模型的结构将保持不变。如果想将权重载入不同的模型(有些层相同)中,则设置by_name=True,只有名字匹配的层才会载入权重

keras有两种model,分别是Sequential模型和泛型模型

5.6.1 Sequential模型

Sequential是多个网络层的线性堆叠

可以通过向Sequential模型传递一个layer的list来构造该模型:

?

1

2

3

4

5

6

7

8

9

from keras.models import Sequential

from keras.layers import Dense, Activation

model = Sequential([

Dense(32, input_dim=784),

Activation('relu'),

Dense(10),

Activation('softmax'),

])

也可以通过.add()方法一个个的将layer加入模型中:

?

1

2

3

model = Sequential()

model.add(Dense(32, input_dim=784))

model.add(Activation('relu'))

还可以通过merge将两个Sequential模型通过某种方式合并

Sequential模型的方法:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

compile(self, optimizer, loss, metrics=[], sample_weight_mode=None)

fit(self, x, y, batch_size=32, nb_epoch=10, verbose=1, callbacks=[], validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None)

evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None)

#按batch获得输入数据对应的输出,函数的返回值是预测值的numpy array

predict(self, x, batch_size=32, verbose=0)

#按batch产生输入数据的类别预测结果,函数的返回值是类别预测结果的numpy array或numpy

predict_classes(self, x, batch_size=32, verbose=1)

#本函数按batch产生输入数据属于各个类别的概率,函数的返回值是类别概率的numpy array

predict_proba(self, x, batch_size=32, verbose=1)

train_on_batch(self, x, y, class_weight=None, sample_weight=None)

test_on_batch(self, x, y, sample_weight=None)

predict_on_batch(self, x)

fit_generator(self, generator, samples_per_epoch, nb_epoch, verbose=1, callbacks=[], validation_data=None, nb_val_samples=None, class_weight=None, max_q_size=10)

evaluate_generator(self, generator, val_samples, max_q_size=10)

5.6.2 泛型模型

Keras泛型模型接口是:

用户定义多输出模型、非循环有向模型或具有共享层的模型等复杂模型的途径

适用于实现:全连接网络和多输入多输出模型

多输入多输出,官方例子给出:预测一条新闻的点赞转发数,主要输入是新闻本身,还可以加入额外输入,比如新闻发布日期,新闻作者等,具体的实现还是看官网文档吧:

http://keras-cn.readthedocs.io/en/latest/getting_started/functional_API/

所以感觉这个模型可以针对特定task搞一些创新哦

泛型模型model的属性:

model.layers:组成模型图的各个层

model.inputs:模型的输入张量列表

model.outputs:模型的输出张量列表

方法:类似序列模型的方法

补充get_layer

get_layer(self, name=None, index=None)

本函数依据模型中层的下标或名字获得层对象,泛型模型中层的下标依据自底向上,水平遍历的顺序。

name:字符串,层的名字

index: 整数,层的下标

函数的返回值是层对象

Keras深度学习框架介绍(结束)相关推荐

  1. 在Ubuntu上安装Keras深度学习框架

    目录 1)安装pip 2)安装Python科学套件 3)安装TensorFlow 4)安装keras 5)安装Jupyter Notebook 6)运行Keras 本文介绍如何在Ubuntu上安装Ke ...

  2. 采用keras深度学习框架搭建卷积神经网络模型实现垃圾分类,基于树莓派上进行实时视频流的垃圾识别源代码

    一.项目概述 简介:该垃圾分类项目主要在于对各种垃圾进行所属归类,本次项目采用keras深度学习框架搭建卷积神经网络模型实现图像分类,最终移植在树莓派上进行实时视频流的垃圾识别. 前期:主要考虑PC端 ...

  3. 百度官方文档Plus版,PaddlePaddle深度学习框架介绍

    作者:木羊同学 来源:华章计算机(hzbook_jsj) 现在深度学习框架不但内卷严重,而且头部效应明显.一提起深度学习框架,首先想到的肯定是Google家的TensorFlow,和Facebook家 ...

  4. 国产首款——飞桨PaddlePaddle深度学习框架介绍

    现在深度学习框架不但内卷严重,而且头部效应明显.一提起深度学习框架,首先想到的肯定是Google家的TensorFlow,和Facebook家的PyTorch.究竟排名谁先谁后,还要看你是工业界还是学 ...

  5. DL之Keras: Keras深度学习框架的注意事项(默认下载存放路径等)、使用方法之详细攻略

    DL之Keras: Keras深度学习框架的注意事项(自动下载存放路径等).使用方法之详细攻略 目录 Keras深度学习框架的注意事项 1.Keras自动下载默认数据集/模型存放位置 Windows系 ...

  6. Keras 深度学习框架中文文档

    2019独角兽企业重金招聘Python工程师标准>>> Keras深度学习框架中文文档 Keras官网:http://keras.io/ Github项目:https://githu ...

  7. Windows+Anaconda+tensorflow+keras深度学习框架搭建--reproduced

    转载于网络,已备查用. 现在把windows下的Anaconda+tensorflow+keras深度学习框架搭建过程记录如下 1.下载安装Anaconda记住支持版本一定是python3以上的版本 ...

  8. Keras深度学习框架配置

    北京 | 深度学习与人工智能研修 12月23-24日 再设经典课程 重温深度学习阅读全文> 正文共7349个字,49张图,预计阅读时间19分钟. 作者:周纵苇 微博:@MrGiovanni 邮箱 ...

  9. Keras 深度学习框架方法及参数

    Keras是python中基于Theano.CNTK等为计算后台的深度学习建模环境,相对于其他的深度学习框架,如tensorflow,theano,Caffe等,Keras具有其显著的优点,如,支持C ...

最新文章

  1. javascript基础 之 json
  2. 2021-2022-1 线性代数知识点总结的视频
  3. python开发工具和框架安装器_Python 开发工具和框架安装
  4. python开源人脸识别库识别率达99_Python的开源人脸识别库:离线识别率高达99.38%...
  5. 使用Entity Framework code first, migration
  6. GIT文件的三种状态
  7. JEECG企业微云快速二次开发平台-新版本首页展示
  8. 【iOS】UITabView/UICollectionView 全选问题
  9. 计算机组成原理—数据的表示、运算与校验(思维导图)
  10. java并发编程(四) 线程池 任务执行、终止源码分析
  11. QEMU/KVM libvirt X710 PCI passthrough DPDK 网络性能测试
  12. 智慧城管统计考评详解
  13. BOM Routing (2009-08-31 23:46:00)
  14. transform模板函数调用tolower函数报错原因、解决办法
  15. Python再夺冠,2020年度编程语言排行榜出炉
  16. 视频播放性能优化-视频MOOV前置
  17. 响应式移动端框架_简单,响应式,移动优先导航
  18. java:定义USB接口
  19. 人工智能几乎会影响到 IT 行业的每个方面,包括编程和开发
  20. 虚拟机上的Linux系统如何联网?

热门文章

  1. cookie和session的讲解
  2. CentOS系统下docker的安装与卸载
  3. 35个非主流开源数据库
  4. 关于const记录类型全局变量赋初值的问题
  5. 删除WSS卸载后遗留的数据库
  6. 安全手册(初稿)[转]
  7. 弱口令-20211221
  8. java kaptcha_java相关:kaptcha验证码使用方法详解
  9. 无法访问虚拟机tomcat网页
  10. 安卓百度地图附近poi搜索以及到指定poi的换乘方案