Keras学习笔记

这就是Keras

Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras:

简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性)
支持CNN和RNN,或二者的结合
无缝CPU和GPU切换
Keras的核心数据结构是“模型”,模型是一种组织网络层的方式

# 模型输入张量
Input(shape=(input_dim,), dtype='float32', name='main_input')
# concatenate数据并联
keras.layers.concatenate([main_input, site_input, access_input])
Dense(200, activation='relu',

             kernel_initializer='lecun_uniform', kernel_regularizer=regularizers.l2(regularizer))(x0)

Dropout(dropout)(x)

# 定义模型三个输入,一个输出

model =  Model(inputs=[main_input, site_input, access_input], outputs=[x])

一个简单的demo

from keras.models import Sequential

# 构建一个模型

model = Sequential()

from keras.layers import Dense, Activation

model.add(Dense(units=64, input_dim=100))

model.add(Activation("relu"))

model.add(Dense(units=10))

model.add(Activation("softmax"))

# 模型编译

model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])

from keras.optimizers import SGD

model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True))

# 模型训练

model.fit(x_train, y_train, epochs=5, batch_size=32)

# 分批训练

model.train_on_batch(x_batch, y_batch)

# 模型评估

loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)

# 模型预测

classes = model.predict(x_test, batch_size=128)

序贯(Sequential)模型

序贯模型是多个网络层的线性堆叠,也就是“一条路走到黑”。

单输入单输出,一条路通到底,层与层之间只有相邻关系,跨层连接统统没有。这种模型编译速度快,操作上也比较简单。

https://keras-cn.readthedocs.io/en/latest/getting_started/sequential_model/

函数式(Functional)模型

层对象接受张量为参数,返回一个张量。
支持多输入多输出,层与层之间想怎么连怎么连,但是编译速度慢。
输入是张量,输出也是张量的一个框架就是一个模型,通过Model定义。
这样的模型可以被像Keras的Sequential一样被训练

符号计算

无论是Theano还是TensorFlow,都是一个“符号式”的库。
符号主义的计算首先定义各种变量,然后建立一个“计算图”,计算图规定了各个变量之间的计算关系。
建立好的计算图需要编译以确定其内部细节,然而,此时的计算图还是一个“空壳子”,里面没有任何实际的数据,只有当你把需要运算的输入放进去后,才能在整个模型中形成数据流,从而形成输出值。
因为符号计算能够提供关键的计算优化、自动求导等功能。

张量

张量可以看作是向量、矩阵的自然推广,我们用张量来表示广泛的数据类型。
张量的阶数有时候也称为维度,或者轴 axis
data_format

“channels_first”,即通道维靠前。(100,3,16,32) theano  caffe
“channels_last”,(100,16,32,3) tensorflow

batch

深度学习的优化算法,说白了就是梯度下降。每次的参数更新有两种方式。
第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。
这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent,批梯度下降。

另一种,每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent。这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,hit不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。

为了克服两种方法的缺点,现在一般采用的是一种折中手段,mini-batch gradient decent,小批的梯度下降,这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。

Keras中用的优化器SGD是stochastic gradient descent的缩写

epochs

epochs指的就是训练过程中数据将被“轮”多少次,就这样

卷积层

Conv1D层:一维卷积层(即时域卷积),用以在一维输入信号上进行邻域滤波
Conv2D层:二维卷积层,即对图像的空域卷积
Conv3D层:三维卷积对三维的输入进行滑动窗卷积

常用层

常用层对应于core模块,core内部定义了一系列常用的网络层,包括全连接、激活层等
Dense层:常用的全连接层,所实现的运算是output = activation(dot(input, kernel)+bias)
Activation层:激活层对一个层的输出施加激活函数
Dropout层:为输入数据施加Dropout。Dropout将在训练过程中每次更新参数时按一定概率(rate)                   随机断开输入神经元,Dropout层用于防止过拟合。
Flatten层:用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。Flatten不影响batch的大小。
Reshape层:用来将输入shape转换为特定的shape

嵌入层 Embedding

嵌入层将正整数(下标)转换为具有固定大小的向量,如[[4],[20]]->[[0.25,0.1],[0.6,-0.2]]

Embedding层只能作为模型的第一层

Merge层

Add:

添加输入列表的图层。
该层接收一个相同shape列表张量,并返回它们的和,shape不变。

SubStract:

两个输入的层相减。

Concatenate:

该层接收一个列表的同shape张量,并返回它们的按照给定轴相接构成的向量。

(批)规范化BatchNormalization

该层在每个batch上将前一层的激活值重新规范化,即使得其输出数据的均值接近0,其标准差接近1
BN层的作用:
(1)加速收敛 (2)控制过拟合,可以少用或不用Dropout和正则 (3)降低网络对初始化权重不敏感 (4)允许使用较大的学习率

参考资料:

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

https://keras-cn.readthedocs.io/en/latest/

https://blog.keras.io/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值