博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Keras(四)实现批标准化、激活函数、dropout
阅读量:4201 次
发布时间:2019-05-26

本文共 7204 字,大约阅读时间需要 24 分钟。

本文将详细介绍:

  • 实现批标准化
  • 实现selu激活函数
  • 实现dropout

一,实现批标准化

  • 在模型中加入批标准化层。
  • 激活函数relu在keras中可以独立以层级的方式加入。
  • 关于BatchNormalization的介绍
1,keras实现批标准化代码如下
model = keras.models.Sequential()model.add(keras.layers.Flatten(input_shape=[28, 28]))for _ in range(20):    model.add(keras.layers.Dense(100, activation="relu"))    model.add(keras.layers.BatchNormalization())# 批标准化    """        model.add(keras.layers.Dense(100))    model.add(keras.layers.BatchNormalization())    model.add(keras.layers.Activation('relu'))    """model.add(keras.layers.Dense(10, activation="softmax"))model.compile(loss="sparse_categorical_crossentropy",              optimizer = keras.optimizers.SGD(0.001),              metrics = ["accuracy"])
2,完整代码如下
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,打印模型安装包版本号print(tf.__version__)print(sys.version_info)for module in mpl, np, pd, sklearn, tf, keras:    print(module.__name__, module.__version__)    # 2,加载模型数据-测试数据,测试数据,验证数据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,加载模型# tf.keras.models.Sequential()model = keras.models.Sequential()model.add(keras.layers.Flatten(input_shape=[28, 28]))for _ in range(1):    model.add(keras.layers.Dense(100, activation="relu"))    model.add(keras.layers.BatchNormalization())# 批标准化     # model.add(keras.layers.Dense(100))    # model.add(keras.layers.BatchNormalization())    # model.add(keras.layers.Activation('relu'))model.add(keras.layers.Dense(10, activation="softmax"))model.compile(loss="sparse_categorical_crossentropy",              optimizer = keras.optimizers.SGD(0.001),              metrics = ["accuracy"])# 5,查看模型层级model.summary()# 6,添加callback,并训练模型# Tensorboard, earlystopping, ModelCheckpointlogdir = './dnn-bn-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=5, min_delta=1e-3),]history = model.fit(x_train_scaled, y_train, epochs=10,                    validation_data=(x_valid_scaled, y_valid),                    callbacks = callbacks)# 7,使用matplotlib画损失,正确率变化图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,使用估计器计算测试数据的准确率model.evaluate(x_test_scaled, y_test, verbose=0)

二,实现selu激活函数

1,keras实现selu激活函数代码如下
model = keras.models.Sequential()model.add(keras.layers.Flatten(input_shape=[28, 28]))for _ in range(1):    model.add(keras.layers.Dense(100, activation="selu"))    # model.add(keras.layers.BatchNormalization())# 批标准化     # model.add(keras.layers.Dense(100))    # model.add(keras.layers.BatchNormalization())    # model.add(keras.layers.Activation('relu'))model.add(keras.layers.Dense(10, activation="softmax"))model.compile(loss="sparse_categorical_crossentropy",              optimizer = keras.optimizers.SGD(0.001),              metrics = ["accuracy"])

三,实现dropout

详细的介绍dropout的文章摘录如下:

1,keras实现dropout代码如下
model = keras.models.Sequential()model.add(keras.layers.Flatten(input_shape=[28, 28]))for _ in range(20):    model.add(keras.layers.Dense(100, activation="selu"))model.add(keras.layers.AlphaDropout(rate=0.5))# AlphaDropout: 1. 均值和方差不变 2.标准化性质也不变# model.add(keras.layers.Dropout(rate=0.5))model.add(keras.layers.Dense(10, activation="softmax"))model.compile(loss="sparse_categorical_crossentropy",              optimizer = keras.optimizers.SGD(0.001),              metrics = ["accuracy"])
2,完整代码如下
#!/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,打印模型安装包版本号print(tf.__version__)print(sys.version_info)for module in mpl, np, pd, sklearn, tf, keras:    print(module.__name__, module.__version__)    # 2,加载模型数据-测试数据,测试数据,验证数据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,加载模型# tf.keras.models.Sequential()model = keras.models.Sequential()model.add(keras.layers.Flatten(input_shape=[28, 28]))for _ in range(20):    model.add(keras.layers.Dense(100, activation="selu"))model.add(keras.layers.AlphaDropout(rate=0.5))# AlphaDropout: 1. 均值和方差不变 2. 标准化性质也不变# model.add(keras.layers.Dropout(rate=0.5))model.add(keras.layers.Dense(10, activation="softmax"))model.compile(loss="sparse_categorical_crossentropy",              optimizer = keras.optimizers.SGD(0.001),              metrics = ["accuracy"])# 5,查看模型层级model.summary()# 6,添加callback,并训练模型# Tensorboard, earlystopping, ModelCheckpointlogdir = './dnn-bn-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=5, min_delta=1e-3),]history = model.fit(x_train_scaled, y_train, epochs=10,                    validation_data=(x_valid_scaled, y_valid),                    callbacks = callbacks)# 7,使用matplotlib画损失,正确率变化图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,使用估计器计算测试数据的准确率model.evaluate(x_test_scaled, y_test, verbose=0)

转载地址:http://epili.baihongyu.com/

你可能感兴趣的文章
LeetCode-栈|双指针-42. 接雨水
查看>>
stdin,stdout,stderr详解
查看>>
Linux文件和设备编程
查看>>
文件描述符
查看>>
终端驱动程序:几个简单例子
查看>>
登录linux密码验证很慢的解决办法
查看>>
fcntl函数总结
查看>>
HTML条件注释
查看>>
Putty远程服务器的SSH经验
查看>>
内核态与用户态
查看>>
使用mingw(fedora)移植virt-viewer
查看>>
趣链 BitXHub跨链平台 (4)跨链网关“初介绍”
查看>>
C++ 字符串string操作
查看>>
C++ qsort 与 sort
查看>>
win10配置tensorflow1.14,1.15,2.0缺少cudart64_100.dll
查看>>
在Linux下搭建带MOD 我的世界(Minecraft)服务器
查看>>
react 复制antd表格行
查看>>
服务节点之间项目中实际用法: 多个Exchange 和 RoutingKey(ServerId)
查看>>
c++A和B文件相互引用报错: error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
查看>>
Integer.MAX_VALUE: 2147483647 Long.MAX_VALUE: 9223372036854775807
查看>>