本文是TF给出的第一个关于keras的demo,以此来引出keras的基本用法和几个关键方法,也体会到了keras使用的方便。

 

一、数据集

demo中所用的数据集是fashion_mnist。是关于穿着物品的图片集。地址:https://github.com/zalandoresearch/fashion-mnist

数据集的特征:

  • 训练数据60000个
  • 测试数据10000个
  • 每个图片是28 * 28 灰度图
  • 10个分类

keras的数据集下载简单几句话就可以搞定。

fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

datasets里包含很多数据集,都可以通过load_data直接下载(虽然很多下载不了,可能是被墙了。可以直接下载数据集,然后保存在根目录的.keras目录的datasets下。macos下是在~/.keras,windows是在?)。

通过load_data下载的数据,直接将训练和测试数据集分开返回,而且也将数据和分类标签分开返回。

 

二、数据处理

归一化。

train_images = train_images / 255.0
test_images = test_images / 255.0

 

三、建模

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=tf.nn.softmax)
])

这个demo里,采用序列模式。

  1. 第一层是Flatten,将28 * 28的像素值,压缩成一行 (784, )
  2. 第二层是Dense,全连接层。激活函数使用relu
  3. 第三层还是Dense,因为是多分类问题,激活函数使用softmax

在keras里,layers里包含所有的层类型。其中还包括,

  • 卷积层,Conv2D
  • Dropout层,Dropout
  • MaxPool1D, 最大池化层
  • 等等

具体可参考:https://tensorflow.google.cn/api_docs/python/tf/keras/layers

 

四、编译

 建模后就是编译。编译的参数主要是:

  • optimizer,优化方法,这里用Adam
  • loss,损失函数,这里用稀疏类别交叉熵(多类的对数损失),sparse是指稀疏矩阵
  • metrics,评估模型在训练和测试时的性能的指标
model.compile(optimizer=tf.train.AdamOptimizer(),
             loss = 'sparse_categorical_crossentropy',
             metrics=['accuracy'])

 

 五、拟合

 拟合是训练参数,拟合训练数据的过程。主要参数:

  • 训练数据
  • 训练标签
  • 训练次数
model.fit(train_images, train_labels, epochs=5)

 

六、评估

 把拟合好的模型应用在测试数据上,得到在测试集上的损失值和准确率。

通过观察和绘制损失值和准确率的统计图,分析模型的性能,是否满足需求。

如果满足需求,再进行最后的预测过程。

test_loss, test_acc = model.evaluate(test_images, test_labels)

 

七、预测

predictions = model.predict(test_images)
predict可以得到所有类型对应的概率。

Reference:

1、https://tensorflow.google.cn/tutorials/keras/basic_classification

2、https://keras-cn.readthedocs.io/en/latest/、keras中文文档。