keras中用来搭建网络的方法有两种
【
Sequential models:这种方法用于实现一些简单的模型。你只需要向一些存在的模型中添加层就行了。
Functional API:Keras的API是非常强大的,你可以利用这些API来构造更加复杂的模型,比如多输出模型,有向无环图等
】
sequential 方法是最常见的一种搭建网络的方法,使用sequential 搭建模型的方法就是一个一个的将网络层 累加起来。
也就是说,你只要按顺序(使用add()方法)像搭积木一样,一层一层地顺序地添加网络层就可以了。
实例如下:
# 先是初始化一个model
model = Sequential()
# add一个卷积层
model.add(Conv2D(32, (3, 3), padding='same',input_shape=x_train.shape[1:]))
# add一个激活层
model.add(Activation('relu'))
# 同理。。。
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
Dense表示全连接层,此时它需要接收两个参数,即输入的节点数及输出的节点数,特别地,在一层一层地构建NN时,Keras还可以根据上一层的输出来推断下一次的输入,所以有些全连接层参数可以省略。
一般来说,在搭建分类网络的时候,dense 与flatten 经常搭配使用;Flatten层的实现在Keras.layers.core.Flatten()类中。
Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。Flatten不影响batch的大小。
from keras.models import Sequential
from keras.layers.core import Flatten
from keras.layers.convolutional import Convolution2D
from keras.utils.vis_utils import plot_model
model = Sequential()
model.add(Convolution2D(64,3,3,border_mode="same",input_shape=(3,32,32)))
# now:model.output_shape==(None,64,32,32)
model.add(Flatten())
# now: model.output_shape==(None,65536)
plot_model(model, to_file='Flatten.png', show_shapes=True)
部分参考自: https://blog.csdn.net/program_developer/article/details/80853425