使用tensorflow和Keras的初级教程( 四 )

评估输出X_test = preprocessing.normalize(X_test)results = model.evaluate(X_test, y_test.values)1781/1781 [==============================] - 1s 614us/step - loss: 0.0086 - accuracy: 0.9989用Tensor Board分析学习曲线TensorBoard是一个很好的交互式可视化工具 , 可用于查看训练期间的学习曲线、比较多个运行的学习曲线、分析训练指标等 。 此工具随TensorFlow自动安装 。
import osroot_logdir = os.path.join(os.curdir, “my_logs”)def get_run_logdir(): import time run_id = time.strftime(“run_%Y_%m_%d-%H_%M_%S”) return os.path.join(root_logdir, run_id)run_logdir = get_run_logdir()tensorboard_cb = keras.callbacks.TensorBoard(run_logdir)model.fit(X_train, y_train.values, batch_size = 2000, epochs = 20, verbose = 1, callbacks=[tensorboard_cb])%load_ext tensorboard%tensorboard --logdir=./my_logs --port=6006
使用tensorflow和Keras的初级教程文章插图
超参调节如前所述 , 对于一个问题空间 , 有多少隐藏层或多少神经元最适合 , 并没有预定义的规则 。 我们可以使用随机化searchcv或GridSearchCV来超调一些参数 。 可微调的参数概述如下:

  • 隐藏层数
  • 隐藏层神经元
  • 优化器
  • 学习率
  • epoch
声明函数以开发模型
def build_model(n_hidden_layer=1, n_neurons=10, input_shape=29):# 创建模型model = Sequential()model.add(Dense(10, input_shape = (29,), activation = 'tanh'))for layer in range(n_hidden_layer):model.add(Dense(n_neurons, activation="tanh"))model.add(Dense(1, activation = 'sigmoid'))# 编译模型model.compile(optimizer ='Adam', loss = 'binary_crossentropy', metrics=['accuracy'])return model使用包装类克隆模型
from sklearn.base import clonekeras_class = tf.keras.wrappers.scikit_learn.KerasClassifier(build_fn = build_model,nb_epoch = 100, batch_size=10)clone(keras_class)keras_class.fit(X_train, y_train.values)创建随机搜索网格
from scipy.stats import reciprocalfrom sklearn.model_selection import RandomizedSearchCVparam_distribs = { “n_hidden_layer”: [1, 2, 3], “n_neurons”: [20, 30],# “learning_rate”: reciprocal(3e-4, 3e-2),# “opt”:[‘Adam’]}rnd_search_cv = RandomizedSearchCV(keras_class, param_distribs, n_iter=10, cv=3)rnd_search_cv.fit(X_train, y_train.values, epochs=5)检查最佳参数
rnd_search_cv.best_params_{'n_neurons': 30, 'n_hidden_layer': 3}rnd_search_cv.best_score_model = rnd_search_cv.best_estimator_.model优化器也应该微调 , 因为它们影响梯度下降、收敛和学习速率的自动调整 。
  • Adadelta -Adadelta是Adagrad的一个更健壮的扩展 , 它基于梯度更新的移动窗口来调整学习速率 , 而不是累积所有过去的梯度
  • 随机梯度下降-常用 。 需要使用搜索网格微调学习率
  • Adagrad-对于所有参数和其他优化器的每个周期 , 学习速率都是恒定的 。 然而 , Adagrad在处理误差函数导数时 , 会改变每个参数的学习速率“η” , 并在每个时间步长“t”处改变
  • ADAM-ADAM(自适应矩估计)利用一阶和二阶动量来防止跳越局部极小值 , 保持了过去梯度的指数衰减平均值

使用tensorflow和Keras的初级教程文章插图


推荐阅读