本文是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里,采用序列模式。
- 第一层是Flatten,将28 * 28的像素值,压缩成一行 (784, )
- 第二层是Dense,全连接层。激活函数使用relu
- 第三层还是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中文文档。