首先了解Keras的一个很好的途径就是通过 文档
Keras 中文文档地址: https://keras.io/zh/models/about-keras-models/
可以通过查看官方文档更加准确地了解相关信息。
Keras提供的模型,其中分为两类:
我们可以通过 from keras.models import Sequential
或者 from keras.models import Model
来导入对应的模型。
参考Keras文档: https://keras.io/models/sequential/
from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential([
Dense(32, input_shape=(784,)),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
从上述代码中可以看出:
from keras.models import Sequential
引入Sequentialmodel = Sequential([...])
则开始构建model
model.add(Dense(64))
model.add(Activation('tanh'))
等价于
model.add(Dense(64, activation='tanh'))
除了上面代码的:
model = Sequential([
Dense(32, input_shape=(784,)),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
还可以简单的写为:
model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
构建一个模型时,第一层需要给出期待的Input shape
,剩余的层次会自动判断。
input shape是一个tuple
格式的数据,可以是整数的tuple
,也可以是None
input shape中并没有batch dimension
批量维度
2D层,例如Dense
, 通过指定参数 input_dim
(一个数字)来描述输入形状。
3D层,通过参数 input_dim
和 input_length
来描述输入型状。
参数input_shape
通过tuple的形式,指定输入形状。
参数batch_size
可以指定固定批量大小。
batch_size=32
+ input_shape=(6, 8)
= (32, 6, 8)
示例:
model = Sequential()
model.add(Dense(32, input_shape=(784,)))
## 上下相等,对于二维层Dense,可以通过如下所示的input_dim指定输入形状##
model = Sequential()
model.add(Dense(32, input_dim=784))
在训练模型之前,您需要配置学习过程,这是通过编译方法完成的。 形式是model.compile(...)
它收到三个参数:
# 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')
其实compile函数还可以接受其他参数,此处不以详述。
使用fit
函数进行训练,示例如下:
model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
# Generate dummy data
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(2, size=(1000, 1))
# Train the model, iterating on the data in batches of 32 samples
model.fit(data, labels, epochs=10, batch_size=32)
fit函数官方定义如下:
fit(x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None, validation_freq=1)
其中常用的参数:
Integer
或 None
,代表每个梯度更新的样本数,默认值为32.Integer
,模型的训练的 时期数,每个epoch是对x,y的整个迭代。参考Keras文档:https://keras.io/models/model/
Model 模型是带有函数API的,不是线性的,它是一个可以多输入、多输出的模型。
如下:
model = Model(inputs=a, outputs=b)
model = Model(inputs=[a1, a2], outputs=[b1, b2, b3])
与Sequential类似,有compile
fit
等方法。大致和上述的compile和fit一致。
compile(optimizer, loss=None, metrics=None, loss_weights=None, sample_weight_mode=None, weighted_metrics=None, target_tensors=None)
{'output_a':loss_func_1, 'output_b':loss_func_2}
fit(x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None, validation_freq=1)
x,y,batch_size,epoch都和之前说明的一样。
返回 一个History
实例, 其History.history
属性是连续时期的训练损失值和度量值的记录,以及验证损失值和验证度量值(如果适用)。
evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None, callbacks=None)
返回测试模式下模型的损失值(loss)和度量(metricts)值。