- 为了记录Keras基本API,本博客展示一次极简机器学习全流程。
-
建立模型
定义一个简单的线性回归模型,使用 Keras 模块来构建和编译模型。以最简单的单层网络为例,设置1个输出节点,输入节点的数量为特征的种数。
keras.Sequential(layers=None, trainable=True, name=None)是models中的一个类,表示序贯模型(各层仅线性堆叠,无跨层连接)。
注意到定义时没有层,那么如何添加层?可以用其自带的方法Sequential.add(layer, rebuild=True)
。其各个参数代表含义如下:
- layer: layer instance.
什么是layer实例?一层layer由一个IO为张量的计算函数(层的call方法)和一些状态组成,这些状态保存在TensorFlow变量中(层的weights)。网络层通用的读写weights方法有
layer.get_weights()
: 以含有Numpy矩阵的列表形式返回层的权重。layer.set_weights(weights)
: 从含有Numpy矩阵的列表中设置层的权重(与get_weights
的输出形状相同)。
当且仅当它作为模型的第一层时,需传入输入尺寸:
- input_shape: (整数元组,不包括样本数的轴)
以keras.layers
中的全连接层为例
Dense
keras.layers.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
对于这种2D层,输入尺寸传入方式也可更为
- input_dim: 即输入特征种类数量,是整数类型。
接下来需传入一些重要参数:
- units: 正整数,输出空间维度。
- activation: 激活函数 (详见 activations)。 若None,则不使用激活函数 (即,线性激活:
a(x) = x
)。
要实现生成一个指定参数的模型,既可以通过将网络层实例的列表传递给 Sequential
的构造器,来创建一个 Sequential
模型:
Sequential
num_features = 1
model = Sequential([ Dense(1, input_shape=(num_feaetures,)), ])
也可以简单地使用 .add()
方法将各层添加到模型中:
model = keras.models.Sequential()
# Describe the topography of the model.
# The topography of a simple linear regression model is a single node in a single layer.
model.add(keras.layers.Dense(units=1, input_shape=(num_features,)))
在机器学习之前,需要把模型的topography编译为Keras可以高效执行的程序。使用Sequential 模型的compile
方法完成,它接收三个参数:
- 优化器 optimizer。它可以是现有优化器的字符串标识符,如
rmsprop
或adagrad
;也可以是 Optimizer 类的实例,此时可以自定义传参。
keras.optimizers
类具有公共的参数 clipnorm
和 clipvalue
,用于控制梯度裁剪(Gradient Clipping)。
而对于优化器对象,以keras.optimizers.RMSprop(learning_rate=0.001, rho=0.9)
为例
-
- learning_rate: float >= 0. 学习率。
- rho: float >= 0. RMSProp 梯度平方的移动均值的衰减率。
详见:optimizers。
- 损失函数 loss,模型试图最小化的目标函数。它可以是现有损失函数的字符串标识符,如
categorical_crossentropy
或mse
,也可以是一个目标函数。详见:losses。 - 评估标准 metrics:List of现有的标准的字符串标识符,或
keras.metrics.Metric
的实例,或自定义的评估标准函数。
对于任何分类问题,你都希望将其设置为 metrics = ['accuracy']
。在下面的例子中,采用均方误差作为评估标准:
keras.metrics.RootMeanSquaredError(name="root_mean_squared_error", dtype=None)
Compile
model.compile(optimizer=keras.optimizers.RMSprop(learning_rate=my_learning_rate),
loss="mean_squared_error",
metrics=[keras.metrics.RootMeanSquaredError()])
注意:Compile方法的metrics参数可接受的标准built-in评价函数详见: metrics。上例中的均方误差类是指标 - Keras 中文类的一个实例。
下面的程序创建了一个单层、输出为一维的模型。
1 def build_model(my_learning_rate, num_features): 2 """Create and compile a simple linear regression model.""" 3 # Most simple keras models are sequential. 4 model = keras.models.Sequential() 5 6 # Describe the topography of the model. 7 # The topography of a simple linear regression model 8 # is a single node in a single layer. 9 model.add(keras.layers.Dense(units=1, 10 input_shape=(num_features,))) 11 12 # Compile the model topography into code that Keras can efficiently 13 # execute. Configure training to minimize the model's mean squared error. 14 model.compile(optimizer=keras.optimizers.RMSprop(learning_rate=my_learning_rate), 15 loss="mean_squared_error", 16 metrics=[keras.metrics.RootMeanSquaredError()]) 17 18 return modelbuild_model
2. 训练模型
Keras 模型在输入数据和标签的 Numpy 矩阵上进行训练。使用Sequential模型的fit方法完成:
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, max_queue_size=10, workers=1, use_multiprocessing=False)
常用的参数包括:
- x: 输入数据。可以是:
- 一个 Numpy 数组(或类数组),等
- y: 目标数据。与输入数据
x
类似,它可以是 Numpy 数组(序列)等。 - batch_size: 整数或
None
。每次梯度更新的样本数。如果未指定,默认为 32。未完待续。 - epochs: 整数。训练模型迭代轮次。一个轮次是在整个
x
或y
上的一轮迭代。 请注意,与initial_epoch
一起,epochs
被理解为「最终轮次」。 模型并不是训练了epochs
轮,而是到第epochs
轮停止训练。
该方法返回一个 History
对象:其History.epoch
属性是各训练轮次的索引组成的列表;其 History.history
属性是连续 epoch 训练以及验证集(如果适用)的损失和评估值的记录,可以直接输入pandas.DataFrame
方法转化。
更多信息,请查阅Sequential 顺序模型 - 中文文档。
训练结束后,可以用模型的get_weights()
方法查看模型参数(weights, bias, etc.),它返回一个flat list,元素依次为:首层的权重,首层的bias,第二层的权重,第二层的bias,…(某层的权重矩阵.shape=(该层的输入维数,输出维数))
3. Validate模型
使用Sequential模型的predict_on_batch(x)
方法,其中
- x: 输入数据,Numpy 数组(可用pandas的Series.values方法转换)或列表(如果模型有多输入)。
它返回预测值的NumPy数组。
标签:None,keras,模型,Keras,metrics,备忘录,Sequential,model From: https://www.cnblogs.com/ArmRoundMan/p/18406720