用于 MNIST 分类的基于 TFLearn 的 MLP
现在让我们看看如何使用 TFLearn 实现相同的 MLP,TFLearn 是 TensorFlow 的另一个高级库:
- 导入 TFLearn 库:
import tflearn
- 定义超参数(我们假设数据集已经加载到
X_train
,Y_train
,X_test
和Y_test
变量):
num_layers = 2
num_neurons = []
for i in range(num_layers):
num_neurons.append(256)
learning_rate = 0.01
n_epochs = 50
batch_size = 100
- 构建输入层,两个隐藏层和输出层(与 TensorFlow 和 Keras 部分中的示例相同)
# Build deep neural network
input_layer = tflearn.input_data(shape=[None, num_inputs])
dense1 = tflearn.fully_connected(input_layer, num_neurons[0],
activation='relu')
dense2 = tflearn.fully_connected(dense1, num_neurons[1],
activation='relu')
softmax = tflearn.fully_connected(dense2, num_outputs,
activation='softmax')
- 使用最后一步中构建的 DNN(在变量
softmax
中)定义优化器函数,神经网络和 MLP 模型(在 TFLearn 中称为 DNN):
optimizer = tflearn.SGD(learning_rate=learning_rate)
net = tflearn.regression(softmax, optimizer=optimizer,
metric=tflearn.metrics.Accuracy(),
loss='categorical_crossentropy')
model = tflearn.DNN(net)
- 训练模型:
model.fit(X_train, Y_train, n_epoch=n_epochs,
batch_size=batch_size,
show_metric=True, run_id="dense_model")
训练结束后,我们得到以下输出:
Training Step: 27499 | total loss: 0.11236 | time: 5.853s
| SGD | epoch: 050 | loss: 0.11236 - acc: 0.9687 -- iter: 54900/55000
Training Step: 27500 | total loss: 0.11836 | time: 5.863s
| SGD | epoch: 050 | loss: 0.11836 - acc: 0.9658 -- iter: 55000/55000
--
- 评估模型并打印准确率分数:
score = model.evaluate(X_test, Y_test)
print('Test accuracy:', score[0])
我们得到以下输出:
Test accuracy: 0.9637
与使用 TFLearn 相比,我们获得了相当的精确度。
在笔记本 ch-05_MLP
中提供了使用 TFLearn 进行 MNIST 分类的 MLP 的完整代码。