序贯模型是多个网络层的线性堆叠,可以通过向sequential模型传递一个layer的list来构造该模型:
from keras.models import Sequential
from keras.layers import Dense,Activation
model=Sequential([Dense(32,unitis=784),Activation('relu'),Dense(10),Activation('softmax')])
也可以通过.add()一个一个添加
model=Sequential()
model.add(Dense(32,input_shape=(784,))
model.add(Activation('relu'))
指定输入数据的shape
模型需要知道输入数据的shape,因此,sequential的第一层就需要接受一个关于输入数据shape的参数,后面的各个层则可以自动的推导出中间数据的shape,因此不需要为每一层指定,(第一层一定要指定),有几个方法指定第一层的shape
- 传递一个input_shape的关键字给第一层,input_shape可以是一个数字,其中也可以传递None,如果填入None则表示这个位置可以是任何的正数,数据的batch不应该包含在其中,
- 有些2D层,如dense可以通过指定其输入维度,input_dim来来隐含的指定输入数据的shape,一些3D层可以通过指定input_dim和input_length来指定输入的shape
-如果你需要为输入指定一个固定大小的batch_size可以传递一个batch_size参数到一个层里面。例如你想要输入的张量batch的大小是31,shape是(6,8),则你需要传递batch_size和input_shape=(6,8)
编译
在训练模型之前,我们需要通过compile来对学习过程进行配置,compile接受三个参数,
- 优化器optimizer:该参数可以指定为预定义的优化器名字,如rmsprop,adagrad或者一个Optimizer类的对象,详细见:http://keras-cn.readthedocs.io/en/latest/other/optimizers/
- 损失函数:指定预定义的损失函数名字,categorical_crossentropy,mes,详细见:http://keras-cn.readthedocs.io/en/latest/other/objectives/
- 指定列表的metrics:对于分类问题,一般设定为额metrics[“accuracy”],指标可以是一个预定义的名字,也可以是一个用户制定的函数,可以参考:http://keras-cn.readthedocs.io/en/latest/getting_started/other/metrices.md
# For a multi-class classification problem
model.compile(optimizer="rmsprop",loss='categorical_crossentropy',metrics=['accuracy'])
# For a binary classification problem
model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])
# For a mean squared error regression problem
model.compile(optimizer='rmsprop',loss='mse')
# 自定义的metrics
import keras.backend as k
def mean_pred(y_true,y_pred):
return(k.mean(y_pred))
model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy',mean_pred])
训练
keras一般用Numpy数组作为输入数据和标签的数据类型。训练模型一般使用fit函数
model=Senquential()
model.add(Dense(32,activation='relu',input_dim=100))
model.add(Dense(1,activation='sigmod',))
model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['acuracy'])
# 生成哑变量
import numpy as np
data=np.random.random((1000,100))
labels=np.random.randint(2,size=(1000,1))
# train model
model.fit(data,lables,epochs=10,batch_size=32)
# 10 classes
model=Sequential()
model.add(Dense(32,activation='relu',input_dim=100))
model.add(Dense(10,activation='softmax'))
model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])
# create dummy data
import numpy as np
data=np.random.random((1000,100))
labels=np.random