Keras入门笔记(一)-从二分类问题到多分类问题、图像识别问题

Keras是一个Python深度学习框架,是个高层的API库。它不同于TensorFlow、PyTorch等微分器,Keras高度封装了底层的微分计算等操作,提供了用户友好的API,并且支持在TensorFlow、Theano和CNTK这三个底层微分库之间切换。目前,Keras已被钦定为TensorFlow的用户接口,其地位相当于TorchVision之于PyTorch

Keras的结构

Keras中我们

Keras的常见结构

① 模型

Keras的核心数据结构是“模型”,模型指的是对网络层的组织方式。目前,Keras的模型只有两种形式:

  1. Sequential
  2. Functional

就构建了一个序列模型,接下下来就是不断往这个网络结构中添加不同的网络层并构建它们的连接次序。

② 网络层

网络层由keras.layers进行定义:

就引入了一个全连接层,接着我们无返回地把它添加到网络结构中:

就为网路结构添加了一个512个神经元的全链接层和10个神经元的输出层。

注意到:只有第一层需要指定输入数据的尺寸;此后的每一层将会自动进行推导。

③ 模型编译和训练

现在我们要指定模型的训练方式,我们需要重点关心的有:

  1. optimizer:优化器,可能会影响到模型的收敛速度
  2. loss:模型的目标函数/损失函数
  3. metrics:指标列表,训练时将会根据该列表记录训练效果的衡量值
  4. epochsbatch_size:训练的轮次和梯度下降时每个batch将包含的样本数。
  5. verbose:控制台日志,值为0|1|2——分别对应”不在控制台输出任何消息“、“训练每轮训练进度”、“仅输出训练轮的信息”
  6. validation_datavalidation_split:验证集或自动划分验证集的比例。

我们调用model.compile方法进行编译:

随后,再对编译完毕的模型进行训练:

二分类问题:电影评论分类

二分类问题可能是应用最广泛的机器学习问题。我们可以利用Keras自带的IMDB数据集进行初步上手练习。

IMDB 数据集它包含来自互联网电影数据库(IMDB)的 50 000 条严重两极分化的评论。数据集被分为用于训练的 25 000 条评论与用于测试的 25 000 条评论,训练集和测试集都包含 50% 的正面评论和 50% 的负面评论。

多分类问题:路透社新闻评论

透社数据集,它包含许多短新闻及其对应的主题,由路透社在 1986 年发布。它是一个简单的、广泛使用的文本分类数据集。

路透社新闻数据集和IMDB数据集类似,只不过其label为 维的输出值。

回归问题:波士顿房价

任何看过西瓜书或吴恩达视频课程的同学都不会对这个数据集感到陌生。

不同于上两个问题的做法,我们将在下文采用新的损失函数和评价指标。

首先我们将采用K折法对模型进行评价,所以我们需要多次编译模型,因此需要构建一个模块化的模型方法:nn()

sgd.jpg

 

如果把上文中的优化器换成adam(滑动平均),会观察到一个更平缓的函数图像:

adam.jpg

图像识别问题:MNIST数据集

MINIST数据集非常经典,不需要进行更多地介绍,采用全连接对MNIST进行训练也很简单:

不同的是,我们可以引入CNN来对图像进行处理,例如VGG-16模型:

在训练完毕后我们还可以直接保存这个模型,调用的函数是:

  1. model.to_json():把模型的结构写出为一个json文件
  2. model.save_weights():把模型的参数(权重)保存为一个h5文件
  3. model.load_from_json()model.set_weights():载入网络结构和网络的参数(权重)

例如,对上文中VGG-16的模型可以采用以下脚本保存脚本: