昨天讲到要如何建立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 训练模型验收
今年是我第三度的参赛,不免俗的发表参赛感言一下,除了感谢自己还有机会可以发表些自己内化的知识之外,更...
每份专案都是团队尽心竭力的成果,而 Demo 就是向长官及其他部门展示团队实力的重要时刻! 但如果在...
Day 29 - Android Studio 这几天以来的统整 离我们铁人完赛只剩一天了,我今天就...
Hello 大家, 没有连假就要撑五天才可以放假呜呜, 撑得下去的... 接续着昨天继续介绍, 第一...
接着复写Spriteset_Base两个方法 createAnimation: createAnim...