keras中文官方文档
深度学习:Keras入门(一)之基础篇
Keras有两种类型的模型,序列模型和函数式模型,函数式模型应用更为广泛,序贯模型是函数式模型的一种特殊情况。
序列模型是多个网络层的线性堆叠,也就是“一条路走到黑”。这种模型各层之间是依次顺序关系的线性关系。
1.1构造模型:增加layer
a)通过传递list,一次性构建
from keras.models import Sequential
from keras.layers import Dense, Activation
layers = [Dense(32, units=784),Activation('relu'),Dense(10),Activation('softmax')]
model = Sequential(layers)
b)通过.add()方法,一层一层构建
model = Sequential()
model.add(Dense(32, input_shape=(784,)))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('relu'))
1.2指定输入数据的shape
模型需要知道输入数据的shape,因此,第一层需指定输入数据shape的参数,后面各层则不需要,可以自动推导。
1.3编译
在训练之前,我们需要对学习过程进行配置。compile()3个常用参数:优化器optimizer,损失函数loss,指标列表metrics。
# 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')
1.4训练
keras以numpy数组作为输入数据和标签的数据类型,fit()函数进行训练。
fit(self, x, y, batch_size=32, epochs=10, verbose=1, callbacks=None, validation_split=0.0,
validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0)
batch_size:整数,指定进行梯度下降时每个batch包含的样本数。
epochs:整数,训练终止时的epochs数
verbose:日志显示,0为不输出,1为输出进度条记录,2为每个epoch输出一条记录
validation_split:0-1,指定一定比例数据作为验证集
1.5评估
evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None)
本函数按batch计算在某些输入数据上模型的误差,verbose只能取0,1。如果模型没有其他评价指标,返回一个测试误差的标量值;如果模型还有其他评价指标,返回一个标量的list
1.6例子:基于多层感知器的softmax多分类
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD
# Generate dummy data
import numpy as np
x_train = np.random.random((1000, 20))
y_train = keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10)
x_test = np.random.random((100, 20))
y_test = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)), num_classes=10)
model = Sequential()
# Dense(64) is a fully-connected layer with 64 hidden units.
# here, 20-dimensional vectors.
model.add(Dense(64, activation='relu', input_dim=20))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',optimizer=sgd,metrics=['accuracy'])
model.fit(x_train, y_train,epochs=20, batch_size=128)
score = model.evaluate(x_test, y_test, batch_size=128)
keras函数式接口是用户定义多输出模型、非循环有向模型或具有共享层模型等复杂模型的途径。
2.1例子:全连接网络
from keras.layers import Input, Dense
from keras.models import Model
# This returns a tensor
inputs = Input(shape=(784,))
# a layer instance is callable on a tensor, and returns a tensor
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
predictions = Dense(10, activation='softmax')(x)
# This creates a model that includes
# the Input layer and three Dense layers
model = Model(inputs=inputs, outputs=predictions)
model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])
model.fit(data, labels) # starts training