序贯模型式多个网络层的线性堆叠。
1. 通过向Sequential模型传递一个layer的list构造模型;
from keras.models import Sequential
from keras.layers import Dense, Activation
'''
参数说明:
Dense表示设置全连接层输入和输出,然后设置第一层中的激活函数为‘relu’;
同理第二层的输入式第一层的输出,因此只定义了输出和激活函数。
'''
model = Sequential([
Dense(32, input_dim=784),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
2. 通过add()方法将layer一个个加入到模型中;
model.add(Dense(15))
model.add(Activation('relu'))
3.指定输入数据的shape
模型需要知道输入数据的shape,因此Sequential的第一层需要设置输入数据的shape,后面层只需要控制设置输出就ok了,输入能够根据前面的输出进行自适应匹配。
model = Sequential()
model.add(Dense(100, batch_size=100, input_shape=(6, 6)))
model.add(Activation('relu'))
model.add(Dense(40))
model.add(Activation('softmax'))
4.学习过程配置
在训练模型之前需要对模型的学习过程参数进行相关的设置,利用compile进行配置。compile接受三个参数:
"""
设置学习过程相关参数
参数说明:
lr:大于或者等于0的浮点数,表示学习率
momentum:大于或等于0的浮点数,动量参数
decay:大于或等于0的数,每次更新之后学习率的衰减
nesterov:布尔,确定是否使用Nesterov动量
"""
sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer='sgd',metrics=['accuracy'])
5.训练
keras以numpy数组作为输入数据和标签类型。训练一般使用fit函数。一个简单的例子,详细使用可以参见keras中文文档。
model = Sequential()
model.add(Dense(100, input_dim=100))
model.add(Activation('relu'))
model.add(Dense(1))
model.add(Activation('sigmoid'))
"""
设置学习过程相关参数
参数说明:
lr:大于或者等于0的浮点数,表示学习率
momentum:大于或等于0的浮点数,动量参数
decay:大于或等于0的数,每次更新之后学习率的衰减
nesterov:布尔,确定是否使用Nesterov动量
"""
sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy'])
data = np.random.random((1000, 100))
label = np.random.randint(2, size=(1000, 1))
model.fit(data, label, epochs=10)