Keras完全梳理(二)

使用Keras Sequential顺序模型

顺序模型是多个网络层的线性堆叠。

可以将网络层实例的列表传递给Sequential的构造器,创建Sequential模型:

from keras.models import Sequential
from keras.layers import Dense, Activation

mnodel = Sequential([
    Dense(32, input_shape=(784,)),
    Activation('relu'),
    Dense(10),
    Activation('softmax')
])

或者,使用.add()方法将各层添加到模型中:

model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))

2、Lambda 将任意表达式封装为Layer对象

keras.layers.Lambda(function, output_shape=None, mask=None, arguments=None)
# function:需要封装的函数。 将输入张量作为第一个参数。
# output_shape: 预期的函数输出尺寸。 只在使用 Theano 时有意义。 可以是元组或者函数。 如果是元组,它只指定第一个维度; 样本维度假设与输入相同: output_shape = (input_shape[0], ) + output_shape 或者,输入是 None 且样本维度也是 None: output_shape = (None, ) + output_shape 如果是函数,它指定整个尺寸为输入尺寸的一个函数: output_shape = f(input_shape)
# arguments: 可选的需要传递给函数的关键字参数。

输入尺寸

任意。当使用此层作为模型中的第一层时, 使用参数 input_shape (整数元组,不包括样本数的轴)。

输出尺寸

由 output_shape 参数指定 (或者在使用 TensorFlow 时,自动推理得到)。

例:

添加一个x -> x^2层

model.add(Lambda(lambda x: x ** 2))
# 添加一个网络层,返回输入的正数部分
# 与负数部分的反面的连接

def antirectifier(x):
    x -= K.mean(x, axis=1, keepdims=True)
    x = K.l2_normalize(x, axis=1)
    pos = K.relu(x)
    neg = K.relu(-x)
    return K.concatenate([pos, neg], axis=1)

def antirectifier_output_shape(input_shape):
    shape = list(input_shape)
    assert len(shape) == 2  # only valid for 2D tensors
    shape[-1] *= 2
    return tuple(shape)

model.add(Lambda(antirectifier,
                 output_shape=antirectifier_output_shape))

3、后端 Backend

参考资料:https://keras.io/zh/backend/

Keras是一个模型级库,为开发深度学习模型提供了高层次的构建模块。它不处理诸如张量乘积和卷积等低级操作。相反,它依赖于一个专门的、优化的张量操作库来完成这个操作,它可以作为 Keras 的「后端引擎」。相比单独地选择一个张量库,而将 Keras 的实现与该库相关联,Keras 以模块方式处理这个问题,并且可以将几个不同的后端引擎无缝嵌入到 Keras 中。

目前Keras可用三个后端实现:

  • TensorFlow后端
  • Theano后端
  • CNTK后端
x_mask = Lambda(lambda x: K.cast(K.greater(K.expand_dims(x, 2), 0), 'float32'))(x1)  # bakend使用了tensorflow的方法

4、回调函数 Callbacks

回调函数是一组在训练的特定阶段被调用的函数集,可以使用回调函数来观察训练过程中网络内部的状态和统计信息。通过传递回调函数列表到模型的 .fit () 中,即可在给定的训练阶段调用该函数集中的函数。

【Tips】虽然我们称之为回调“函数”,但事实上Keras的回调函数是一个类,回调函数只是习惯性称呼

猜你喜欢

转载自blog.csdn.net/caicai0001000/article/details/110957041