[转]keras使用入门及3D神经网络资源

原文链接https://blog.csdn.net/lengxiaomo123/article/details/68926778

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

keras模型
  • Sequential模型
  • 泛型模型
Sequential是多个网络层的线性堆叠。
以通过向Sequential模型传递一个layer的list来构造该模型
[转载]keras使用入门及3D卷积神经网络资源
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
[转载]keras使用入门及3D卷积神经网络资源
目标函数objectives(目标函数,或称损失函数,是编译一个模型必须的两个参数之一)
model.compile(loss='mean_squared_error', optimizer='sgd')
以下是一些预定义的loss function
[转载]keras使用入门及3D卷积神经网络资源
优化器optimizers (优化器是编译Keras模型必要的两个参数之一)
[转载]keras使用入门及3D卷积神经网络资源
可以在调用model.compile()之前初始化一个优化器对象,然后传入该函数(如上所示),也可以在调用model.compile()时传递一个预定义优化器名。在后者情形下,优化器的参数将使用默认值。
[转载]keras使用入门及3D卷积神经网络资源
optimizers
  • SGD
  • RMSprop
  • Adadelta
观察一下个optimizer的效果(像小球在等高线上滚落至最低点)
[转载]keras使用入门及3D卷积神经网络资源
Merge
多个Sequential可经由一个Merge层合并到一个输出。Merge层的输出是一个可以被添加到新 Sequential的层对象。下面这个例子将两个Sequential合并到一起
[转载]keras使用入门及3D卷积神经网络资源
[转载]keras使用入门及3D卷积神经网络资源

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

[转载]keras使用入门及3D卷积神经网络资源
泛型模型
Keras的泛型模型为Model,即广义的拥有输入和输出的模型,我们使用Model来初始化一个泛型模型。 所有输入是张量,输出是张量的计算图就是keras模型,用于构建自建的复杂网络层序关系。
[转载]keras使用入门及3D卷积神经网络资源
常用层
  • Dense
  • Activation
  • Dropout
  • Flatten
Dense(全连接层)
[转载]keras使用入门及3D卷积神经网络资源
[转载]keras使用入门及3D卷积神经网络资源
[转载]keras使用入门及3D卷积神经网络资源
Activation **层对一个层的输出施加**函数
keras.layers.core.Activation(activation) ;activation:将要使用的**函数,为预定义**函数名或一个Tensorflow/Theano的函数。
[转载]keras使用入门及3D卷积神经网络资源
[转载]keras使用入门及3D卷积神经网络资源
[转载]keras使用入门及3D卷积神经网络资源
y=max(0,x) relu是目前比较流行的**函数
Dropout
为输入数据施加Dropout。Dropout将在训练过程中每次更新参数时随机断开一定百分比(p)的输入神经元连接,Dropout层用于防止过拟合。
keras.layers.core.Dropout(p) ;p:0~1的浮点数,控制需要断开的链接的比例 。
[转载]keras使用入门及3D卷积神经网络资源
[转载]keras使用入门及3D卷积神经网络资源
[转载]keras使用入门及3D卷积神经网络资源
Flatten
Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。Flatten不影响batch的大小。
keras.layers.core.Flatten()
[转载]keras使用入门及3D卷积神经网络资源
看下图中的「展开」
[转载]keras使用入门及3D卷积神经网络资源
卷积层
  • Convolution2D层
  • Convolution3D层
Convolution2D层
二维卷积层对二维输入进行滑动窗卷积,当使用该层作为第一层时,应提供input_shape参数。例如input_shape = (3,128,128)代表128*128的彩色RGB图像。
[转载]keras使用入门及3D卷积神经网络资源
Convolution3D层
三维卷积对三维的输入进行滑动窗卷积,当使用该层作为第一层时,应提供input_shape参数。例如input_shape = (3,10,128,128)代表对10帧128*128的彩色RGB图像进行卷积 。
池化层
  • MaxPooling2D层
  • MaxPooling3D层
  • AveragePooling2D层
  • AveragePooling3D层
递归层Recurrent
使用它的子类LSTM或SimpleRNN
[转载]keras使用入门及3D卷积神经网络资源
[转载]keras使用入门及3D卷积神经网络资源
3D卷积神经网络实现代码git资源
例子数据源
实战(实验一下论文里的部分代码)
[转载]keras使用入门及3D卷积神经网络资源

上图是一个多视图的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框架可以帮助我们快速实现深度学习算法,将主要精力投入到算法的研究和调参上。