Day 18 self-attention的实作准备(四) keras的compile和fit

前言

昨天讲到要如何建立model,今天来讲要如何训练以及预测

编译模型

建立完模型之後,必须呼叫compile()方法来指定损失函式与优化法(optimizer)

model.compile(loss="sparse_categorical_crossentropy",
              optimizer="sgd",
              metrics=["accuracy"])

这段程序需要解释一下。首先,我们使用"sparse_categorical_crossentropy" loss的原因是因为标签是类别,也就是每一个标签彼此并不相关。如果是另一个情况,每一个实例都有每个类别的目标机率(例如one-hot向量,比如说[0., 0., 0., 1., 0., 0., 0., 0., 0., 0.]代表3),我们就改用"categorical_crossentropy" loss。如果是在做二元分类,输出层就要使用sigmoid激活函数,而不是"softmax"激活函数,并且要使用"binary_crossentropy" loss

将optimizer设为sgd代表我们要使用简单的随机梯度下降来训练模型。换句话说,Keras会执行反向传播法。

最後因为这个是分类器,因此使用 精确度(accuracy) 来评估可以很明显的看出结果。

训练与评估模型

这边我们只需要呼叫模型的fit()方法可以训练它了:

history = model.fit(X_train, y_train, epochs=30,
                    validation_data=(X_valid, y_valid))

将输入(X_train)以及目标类别(y_train)传给它,以及训练的epoch数,并且传入验证组
keras会在epoch结束的时候,使用验证组来评估损失与其它的指标,可以让你了解模型训练的状况

fit()方法会回传一个History物件,里面有训练参数(history.params)、它经历的epoch串列(history.epoch),以及一个字典(history.history),里面有处理训练组与验证组的每个epoch完毕时的损失以及其他指标。利用这个字典来建立一个pandas DataFrame并且呼叫plot()方法

import pandas as pd
import matplotlib.pyplot as plt

pd.DataFrame(history.history).plot(figsize=(8, 5))
plt.grid(True)
plt.gca().set_ylim(0, 1)
plt.show()

用模型来预测

接着我们可以使用模型的predict()方法来对test资料做预测
这边使用测试资料的前三个资料

X_new = X_test[:3]
y_proba = model.predict(X_new)
y_proba.round(2)


这边可以看到模型计算出来各个类别的机率,从类别0到类别9。

y_pred = np.argmax(y_proba, axis=1)
y_new = y_test[:3]
print(y_pred)
print(y_new)

从这边可以看到训练出来的结果和正确答案一样

参考资料


<<:  IOS、Python自学心得30天 Day-15 训练模型验收

>>:  图的走访 - DFS 篇

Day 01 每次参赛每次都要出现的铁人宣言

今年是我第三度的参赛,不免俗的发表参赛感言一下,除了感谢自己还有机会可以发表些自己内化的知识之外,更...

[职场]不放过每个细节,完成一场 0 失误的专案 Demo!

每份专案都是团队尽心竭力的成果,而 Demo 就是向长官及其他部门展示团队实力的重要时刻! 但如果在...

Day 29 - Android Studio 这几天以来的统整

Day 29 - Android Studio 这几天以来的统整 离我们铁人完赛只剩一天了,我今天就...

Day12 iPhone捷径-媒体Part2

Hello 大家, 没有连假就要撑五天才可以放假呜呜, 撑得下去的... 接续着昨天继续介绍, 第一...

[Day26] 实作 - 动画篇3

接着复写Spriteset_Base两个方法 createAnimation: createAnim...