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资源
例子数据源
实战(实验一下论文里的部分代码)
上图是一个多视图的3D卷积神经网络,我们只用keras简单搭建一个网络骨架
model = Sequential()
# 160*100*22model.add(Convolution3D(10,kernel_dim1=9, # depthkernel_dim2=9, # rowskernel_dim3=9, # colsinput_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, # depthkernel_dim2=9, # rowskernel_dim3=9, # colsactivation='relu'))# now 68*38*8
model.add(MaxPooling2D(pool_size=(2,2)))# now 34*19*8
model.add(Convolution3D(50,kernel_dim1=5, # depthkernel_dim2=9, # rowskernel_dim3=8, # colsactivation='relu'))# now 26*12*4
model.add(MaxPooling2D(pool_size=(2,2)))# now 13*6*4
model.add(Convolution3D(150,kernel_dim1=3, # depthkernel_dim2=4, # rowskernel_dim3=3, # colsactivation='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
# Compilemodel.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 代价函数比较博客