keras使用入门及3D卷积神经网络资源

来源:互联网 发布:大数据 徐子沛 微盘 编辑:程序博客网 时间:2024/04/30 01:45


keras使用入门及3D卷积神经网络资源

keras模型
  • Sequential模型
  • 泛型模型

Sequential是多个网络层的线性堆叠。
以通过向Sequential模型传递一个layer的list来构造该模型

Sequential模型方法
  • compile
  • fit
  • evaluate
  • predict

简单的keras代码演示:

from keras.layers import Dense,Activation

from keras.models import Sequential

model = Sequential([Dense(10,input_dim=784),
          Activation('relu'),
          Dense(10),
          Activation('relu'),
          Dense(1),])

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

compile


目标函数objectives(目标函数,或称损失函数,是编译一个模型必须的两个参数之一)
model.compile(loss='mean_squared_error', optimizer='sgd')
以下是一些预定义的loss function


优化器optimizers (优化器是编译Keras模型必要的两个参数之一)


可以在调用model.compile()之前初始化一个优化器对象,然后传入该函数(如上所示),也可以在调用model.compile()时传递一个预定义优化器名。在后者情形下,优化器的参数将使用默认值。


optimizers
  • SGD
  • RMSprop
  • Adadelta


观察一下个optimizer的效果(像小球在等高线上滚落至最低点)


Merge
多个Sequential可经由一个Merge层合并到一个输出。Merge层的输出是一个可以被添加到新 Sequential的层对象。下面这个例子将两个Sequential合并到一起




支持一些预定义的合并模式:



泛型模型
Keras的泛型模型为Model,即广义的拥有输入和输出的模型,我们使用Model来初始化一个泛型模型。 所有输入是张量,输出是张量的计算图就是keras模型,用于构建自建的复杂网络层序关系。


常用层
  • Dense
  • Activation
  • Dropout
  • Flatten

Dense(全连接层)





Activation 激活层对一个层的输出施加激活函数
keras.layers.core.Activation(activation) ;activation:将要使用的激活函数,为预定义激活函数名或一个Tensorflow/Theano的函数。



y=max(0,x) relu是目前比较流行的激活函数

Dropout
为输入数据施加Dropout。Dropout将在训练过程中每次更新参数时随机断开一定百分比(p)的输入神经元连接,Dropout层用于防止过拟合。
keras.layers.core.Dropout(p) ;p:0~1的浮点数,控制需要断开的链接的比例 。




Flatten
Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。Flatten不影响batch的大小。
keras.layers.core.Flatten()


看下图中的「展开」


卷积层
  • Convolution2D层
  • Convolution3D层

Convolution2D层
二维卷积层对二维输入进行滑动窗卷积,当使用该层作为第一层时,应提供input_shape参数。例如input_shape = (3,128,128)代表128*128的彩色RGB图像。


Convolution3D层
三维卷积对三维的输入进行滑动窗卷积,当使用该层作为第一层时,应提供input_shape参数。例如input_shape = (3,10,128,128)代表对10帧128*128的彩色RGB图像进行卷积 。

池化层
  • MaxPooling2D层
  • MaxPooling3D层
  • AveragePooling2D层
  • AveragePooling3D层

递归层Recurrent
使用它的子类LSTM或SimpleRNN



3D卷积神经网络实现代码git资源
https://github.com/Ectsang/3D-CNN-Keras/blob/master/3d-cnn-action-recog-keras.py
例子数据源
http://www.nada.kth.se/cvap/actions/

实战(实验一下论文里的部分代码)


上图是一个多视图的3D卷积神经网络,我们只用keras简单搭建一个网络骨架

model = Sequential()

# 160*100*22
model.add(Convolution3D(
    10,
    kernel_dim1=9, # depth
    kernel_dim2=9, # rows
    kernel_dim3=9, # cols
    input_shape=(3,160,100,22),
    activation='relu'
))# now 152*92*14

model.add(MaxPooling2D(
    pool_size=(2,2)
))# now 76*46*14

model.add(Convolution3D(
    30,
    kernel_dim1=7, # depth
    kernel_dim2=9, # rows
    kernel_dim3=9, # cols
    activation='relu'
))# now 68*38*8

model.add(MaxPooling2D(
    pool_size=(2,2)
))# now 34*19*8

model.add(Convolution3D(
    50,
    kernel_dim1=5, # depth
    kernel_dim2=9, # rows
    kernel_dim3=8, # cols
    activation='relu'
))# now 26*12*4

model.add(MaxPooling2D(
    pool_size=(2,2)
))# now 13*6*4

model.add(Convolution3D(
    150,
    kernel_dim1=3, # depth
    kernel_dim2=4, # rows
    kernel_dim3=3, # cols
    activation='relu'
))# now 10*4*2

model.add(MaxPooling2D(
    pool_size=(2,2)
))# now 5*2*2

model.add(Dropout(0.25))
model.add(Flatten())

model.add(Dense(1500,activation='relu'))

model.add(Dense(750,activation='relu'))

model.add(Dense(num,activation='softmax')) #classification

# Compile
model.compile(loss='categorical_crossentropy', optimizer='RMSprop', metrics=['accuracy'])


keras框架可以帮助我们快速实现深度学习算法,将主要精力投入到算法的研究和调参上。

一些参考
https://keras.io/            keras官方文档
http://keras-cn.readthedocs.io/en/latest/         keras中文文档

http://cs231n.github.io/neural-networks-3/        神经网络

https://github.com/Ectsang/3D-CNN-Keras/blob/master/3d-cnn-action-recog-keras.py          3d卷积神经网络代码
http://www.nada.kth.se/cvap/actions/                                                      3d卷积神经网络所用视频

http://blog.csdn.net/heyongluoyao8/article/details/52478715            优化器比较博客
http://blog.csdn.net/u012162613/article/details/44239919               代价函数比较博客
1 0
原创粉丝点击