用 TensorFlow 高级 API 训练 MLP

与 TensorFlow 一起训练 MLP 最简单的方法是使用高级 API TF.Learn,这与 sklearn 的 API 非常相似。DNNClassifier可以很容易训练具有任意数量隐层的深度神经网络,而 softmax 输出层输出估计的类概率。例如,下面的代码训练两个隐藏层的 DNN(一个具有 300 个神经元,另一个具有 100 个神经元)和一个具有 10 个神经元的 SOFTMax 输出层进行分类:

  1. import tensorflow as tf
  2. feature_columns = tf.contrib.learn.infer_real_valued_columns_from_input(X_train) dnn_clf = tf.contrib.learn.DNNClassifier(hidden_units=[300, 100], n_classes=10, feature_columns=feature_columns)
  3. dnn_clf.fit(x=X_train, y=y_train, batch_size=50, steps=40000)

如果你在 MNIST 数据集上运行这个代码(在缩放它之后,例如,通过使用 skLearn 的StandardScaler),你实际上可以得到一个在测试集上达到 98.1% 以上精度的模型!这比我们在第 3 章中训练的最好的模型都要好:

  1. >>> from sklearn.metrics import accuracy_score
  2. >>> y_pred = list(dnn_clf.predict(X_test))
  3. >>> accuracy_score(y_test, y_pred)
  4. 0.98180000000000001

TF.Learn 学习库也为评估模型提供了一些方便的功能:

  1. >>> dnn_clf.evaluate(X_test, y_test)
  2. {'accuracy': 0.98180002, 'global_step': 40000, 'loss': 0.073678359}

DNNClassifier基于 Relu 激活函数创建所有神经元层(我们可以通过设置超参数activation_fn来改变激活函数)。输出层基于 SoftMax 函数,损失函数是交叉熵(在第 4 章中介绍)。

TF.EXCEL API 仍然是更新的,所以在这些例子中使用的一些名称和函数可能会在你读这本书的时候发生一些变化。但总的思想是不变。