本文共 5333 字,大约阅读时间需要 17 分钟。
本文将在上节基础上,添加DNN深度学习模型。
import matplotlib as mplimport matplotlib.pyplot as pltimport numpy as npimport sklearnimport pandas as pdimport osimport sysimport timeimport tensorflow as tffrom tensorflow import keras# 1,打印使用的python库的版本信息print(sys.version_info)for module in mpl, np, pd, sklearn, tf, keras: print(module.__name__, module.__version__)#---output-----------sys.version_info(major=3, minor=8, micro=5, releaselevel='final', serial=0)matplotlib 3.3.2numpy 1.19.1pandas 1.0.3sklearn 0.23.2tensorflow 2.2.0tensorflow.keras 2.3.0-tf
fashion_mnist = keras.datasets.fashion_mnist(x_train_all, y_train_all), (x_test, y_test) = fashion_mnist.load_data()x_valid, x_train = x_train_all[:5000], x_train_all[5000:]y_valid, y_train = y_train_all[:5000], y_train_all[5000:]print(x_valid.shape, y_valid.shape)print(x_train.shape, y_train.shape)print(x_test.shape, y_test.shape)#---------output--------------------(5000, 28, 28) (5000,)(55000, 28, 28) (55000,)(10000, 28, 28) (10000,)
# x = (x - u) / stdfrom sklearn.preprocessing import StandardScalerscaler = StandardScaler()# x_train: [None, 28, 28] -> [None, 784]x_train_scaled = scaler.fit_transform( x_train.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)x_valid_scaled = scaler.transform( x_valid.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)x_test_scaled = scaler.transform( x_test.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)
# tf.keras.models.Sequential()model = keras.models.Sequential()model.add(keras.layers.Flatten(input_shape=[28, 28]))for _ in range(50): model.add(keras.layers.Dense(100, activation="relu"))model.add(keras.layers.Dense(10, activation="softmax"))model.compile(loss="sparse_categorical_crossentropy", optimizer = keras.optimizers.SGD(0.01), metrics = ["accuracy"])
print(model.summary())
# Tensorboard, earlystopping, ModelCheckpointlogdir = './dnn-callbacks'if not os.path.exists(logdir): os.mkdir(logdir)output_model_file = os.path.join(logdir,"fashion_mnist_model.h5")callbacks = [ keras.callbacks.TensorBoard(logdir), keras.callbacks.ModelCheckpoint(output_model_file,save_best_only = True), keras.callbacks.EarlyStopping(patience=10, min_delta=1e-3),]history = model.fit(x_train_scaled, y_train, epochs=20, validation_data=(x_valid_scaled, y_valid), callbacks = callbacks)
在训练过程中,可能会发生梯度爆炸或梯度消失的情况。具体原因可参考:
此处附带笔者对sigmoid函数详细的求导、求极值过程链接如下:def plot_learning_curves(history): pd.DataFrame(history.history).plot(figsize=(8, 5)) plt.grid(True) plt.gca().set_ylim(0, 3) plt.show()plot_learning_curves(history)
print(model.evaluate(x_test_scaled, y_test, verbose=0))
#!/usr/bin/env python3# -*- coding: utf-8 -*-import matplotlib as mplimport matplotlib.pyplot as pltimport numpy as npimport sklearnimport pandas as pdimport osimport sysimport timeimport tensorflow as tffrom tensorflow import keras# 1,打印使用的python库的版本信息print(sys.version_info)for module in mpl, np, pd, sklearn, tf, keras: print(module.__name__, module.__version__)# 2,从keras.datasets中提取图片数据集-“训练数据”、“验证数据”、“测试数据”,并打印其维度fashion_mnist = keras.datasets.fashion_mnist(x_train_all, y_train_all), (x_test, y_test) = fashion_mnist.load_data()x_valid, x_train = x_train_all[:5000], x_train_all[5000:]y_valid, y_train = y_train_all[:5000], y_train_all[5000:]print(x_valid.shape, y_valid.shape)print(x_train.shape, y_train.shape)print(x_test.shape, y_test.shape)# 3,对数据标准化处理# x = (x - u) / stdfrom sklearn.preprocessing import StandardScalerscaler = StandardScaler()# x_train: [None, 28, 28] -> [None, 784]x_train_scaled = scaler.fit_transform( x_train.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)x_valid_scaled = scaler.transform( x_valid.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)x_test_scaled = scaler.transform( x_test.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)# 4,构建DNN深度神经网络模型# tf.keras.models.Sequential()model = keras.models.Sequential()model.add(keras.layers.Flatten(input_shape=[28, 28]))for _ in range(30): model.add(keras.layers.Dense(100, activation="relu"))model.add(keras.layers.Dense(10, activation="softmax"))model.compile(loss="sparse_categorical_crossentropy", optimizer = keras.optimizers.SGD(0.01), metrics = ["accuracy"])# 5,查看模型整体结构-及参数print(model.summary())# 6,添加回调函数、训练模型# Tensorboard, earlystopping, ModelCheckpointlogdir = './dnn-callbacks'if not os.path.exists(logdir): os.mkdir(logdir)output_model_file = os.path.join(logdir,"fashion_mnist_model.h5")callbacks = [ keras.callbacks.TensorBoard(logdir), keras.callbacks.ModelCheckpoint(output_model_file,save_best_only = True), keras.callbacks.EarlyStopping(patience=10, min_delta=1e-3),]history = model.fit(x_train_scaled, y_train, epochs=20, validation_data=(x_valid_scaled, y_valid), callbacks = callbacks)# 7,绘制训练模型中,变化过程def plot_learning_curves(history): pd.DataFrame(history.history).plot(figsize=(8, 5)) plt.grid(True) plt.gca().set_ylim(0, 3) plt.show()plot_learning_curves(history)# 1. 参数众多,训练不充分# 2. 梯度消失 -> 链式法则 -> 复合函数f(g(x))# 8,调用估计器print(model.evaluate(x_test_scaled, y_test, verbose=0))
转载地址:http://qpili.baihongyu.com/