- Keras基础结构
- 以mnist数据库为例构建Keras神经网络
参考:
环境:
操作系统:Ubuntu 18.04
CUDA: 10.0
TensorFLow: 1.13
Keras: 2.3.1
Keras构建神经网络框架
Sequential model (顺序模型)
顺序模型是多个神经网络层的堆叠.
构建方法:
1 | |
1 | |
设定输入数据维数
向Sequential模型添加网络层时, 需要在第一层定义输入数据的维数. (仅在第一层需要, 因为后面的层可以自动获取前一层的输出维度)
有以下几种方法:
- 在第一层的参数中定义, input_shape = (x, y)
- 类似Dense这种2维的层支持通过参数input_dim指定输入尺寸. 某些3维层支持input_dim和input_length参数
- 如果需要为输入的数据指定一个固定的batch大小, 可以给层传递一个参数batch_size. 例如: 在第一层的参数中包含 (batch_size = 32, input_shape=(6, 8)), 那么每一批输入第一层的数据维度就是(32, 6, 8)
因此, 下面两种方法是等价的:
1 | |
模型编译
在训练模型之前, 需要配置学习过程. 这个过程通过compile方法完成. 他接收三个参数:
- 优化器(optimizer)
- 损失函数(loss)
- 评估标准(metrics)
这三个参数可以是现有优化器的字符串标识符, 也可以是具体的函数.
1 | |
模型训练和验证
使用model.fit()进行模型训练. fit函数的参数包括训练集数据,标签等
使用model.evaluate()进行模型验证, 参数使用测试集数据和标签.
参数versbose用于设置日志现实方式:
- 0: 不在标准输出流输出日志信息
- 1: 输出进度条记录
- 2: 每个epoch输出一行记录
1 | |
模型
自定义模型
给定输入和输出的的张量, 可以创建一个新的模型:
1 | |
对于多个输入和输出数据, 可以使用列表进行创建:
1 | |
核心网络层
常用核心层包括 Dense/Activation/Dropout/Flatten. 其余核心层查看官方文档.
Dense
全连接层. 实现以下操作:
1 | |
其中, activation是激活函数, kernal和bias分别是由网络层创建的权重矩阵和偏置向量.
参数:
- units: 正整数,输出空间维度。
- activation: 激活函数 (详见 activations)。 若不指定,则不使用激活函数 (即,「线性」激活:
a(x) = x)。 - use_bias: 布尔值,该层是否使用偏置向量。
- kernel_initializer:
kernel权值矩阵的初始化器 (详见 initializers)。 - bias_initializer: 偏置向量的初始化器 (see initializers).
- kernel_regularizer: 运用到
kernel权值矩阵的正则化函数 (详见 regularizer)。 - bias_regularizer: 运用到偏置向的的正则化函数 (详见 regularizer)。
- activity_regularizer: 运用到层的输出的正则化函数 (它的 “activation”)。 (详见 regularizer)。
- kernel_constraint: 运用到
kernel权值矩阵的约束函数 (详见 constraints)。 - bias_constraint: 运用到偏置向量的约束函数 (详见 constraints)。
Activation
激活函数. 输入尺寸和输出尺寸一致, 都和上一层的输出尺寸相同.
1 | |
Dropout
按比例将输入下一层的数据随机设置为0. 有助于防止过拟合.
参数:
- rate: 丢弃数据的比例, 范围0-1
- noise_shape: dropout中noise_shape参数的作用
- seed: 作为随机种子的python整数
Flatten
将输入层展平, 不影响批量的大小
参数:
- data_format:一个字符串,其值为
channels_last(默认值)或者channels_first。它表明输入的维度的顺序。此参数的目的是当模型从一种数据格式切换到另一种数据格式时保留权重顺序。channels_last对应着尺寸为(batch, ..., channels)的输入,而channels_first对应着尺寸为(batch, channels, ...)的输入。默认为image_data_format的值,你可以在 Keras 的配置文件~/.keras/keras.json中找到它。如果你从未设置过它,那么它将是channels_last
1 | |
构建mnist神经网络
1 | |