序贯模型是多个网络层的线性堆叠,也就是“一条路走到黑”。
1、通过Sequential构建模型
可以通过向Sequential模型传递一个layer的list来构造该模型:
#导入序贯模型
from keras.models import Sequential
#导入神经网络前向传播层结构和激活函数
from keras.layers import Dense,Activation
#可以通过向Sequential传递一个layer的list来构造该模型
#model = Sequential([Dense(units = 32,input_shape(784,)),Activation('relu'),Dense(10),Activation('softmax')])
'''
在构建神经网络模型的时候,初始必须指定输入数据的列维度;
可以用input_dim指定数据的列数,后者input_shape的方式指定输入的shape;
如果是3D的数据,支持参数input_dim和input_length来指定输入的shape;
'''
也可以通过.add()方法一个个的将layer加入模型中:
#也可以通过.add()方法一个个的将layer加入模型中:
model = Sequential()
model.add(Dense(units = 32,input_shape(784,)))
#model.add(Dense(units = 32,input_dim=784))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('softmax'))
2、编译模型
在训练模型之前,我们需要通过compile来对学习过程进行配置。compile接收三个参数:
- 优化器optimizer:该参数可指定为已预定义的优化器名,如rmsprop、adagrad,或一个Optimizer类的对象
- 损失函数loss:该参数为模型试图最小化的目标函数,它可为预定义的损失函数名,如categorical_crossentropy交叉熵、mse均方差,也可以为一个损失函数。
- 指标列表metrics:对分类问题,我们一般将该列表设置为metrics=[‘accuracy’]。指标可以是一个预定义指标的名字,也可以是一个用户定制的函数.指标函数应该返回单个张量,或一个完成metric_name- > metric_value映射的字典.
# 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')
# For custom 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])
3、训练模型:
Keras以Numpy数组作为输入数据和标签的数据类型。训练模型一般使用fit函数。
# For a single-input model with 10 classes (categorical classification):
# Generate dummy data
import numpy as np
data = np.random.random((1000, 100))
#labels = np.random.randint(10, size=(1000, 1))
#将标签生成one_hot编码,使用keras.utils.to_categorical函数
labels = keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10)
print(labels)
# Train the model, iterating on the data in batches of 32 samples
model.fit(data, labels, epochs=10, batch_size=32)