Keras构建深度神经网络(DNN)

  • 1. 深度神经网络简介
  • 2. Kerase搭建DNN模型
    • 2.1 导入相应的库
    • 2.2 数据加载与归一化
    • 2.3 网络模型的构建
    • 2.4 批归一化,dropout以及selu激活函数
    • 2.5 模型编译与训练
    • 2.6 模型验证

1. 深度神经网络简介

深度神经网络(Deep Neural Networks,DNN)可以理解为有很多隐藏层的神经网络,又被称为深度前馈网络(DFN),多层感知机(Multi-Layer perceptron,MLP),其具有多层的网络结构,如下图所示:

本篇博客的主要内容就是利用tf.keras来搭建一个具有20层隐藏层的网络结构,去实现一个简单的分类问题,分类的数据与TensorFlow2.0(二)–Keras构建神经网络分类模型中一样,代码也是绝大部分重合。

2. Kerase搭建DNN模型

2.1 导入相应的库
# matplotlib 用于绘图
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
# 处理数据的库
import numpy as np
import sklearn
import pandas as pd
# 系统库
import os
import sys
import time
# TensorFlow的库
import tensorflow as tf
from tensorflow import keras
2.2 数据加载与归一化

数据集同样适用 fashion_mnist 数据集:

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[:10000], x_train_all[10000:]
y_valid, y_train = y_train_all[:10000], y_train_all[10000:]

利用sklearn.preprocessing 中的 StrandardScaler 进行数据集的归一化:

from 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)
2.3 网络模型的构建

我们使用keras.models.Sequential()方法来构建模型:

model = keras.models.Sequential()
# flatten层的作用是将28*28维度的输入数据展平成一层
model.add(keras.layers.Flatten(input_shape = [28, 28]))
"""
对于多层神经网络结构,我们可以利用for循环来添加
"""
for _ in range(20):model.add(keras.layers.Dense(100, activation = "relu"))
# 输出为 10的全连接层
model.add(keras.layers.Dense(10, activation = "softmax"))
2.4 批归一化,dropout以及selu激活函数

在多层的神经网络中,我们通常使用批归一化和dropout来进行模型的加速与优化:

model = keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape = [28, 28])) # flatten层的作用是将28*28维度的输入数据展平成一层
"""
我们在每一层的输出后面加上了归一化操作,这称为批归一化
批归一化可以使网络的效果变得更好,训练速度会更快
归一化有两种方式:
- Min-Max归一化: x *= (x-min)/(max-min)
- Z-score归一化: x *= (x-u)/σ
"""
for _ in range(20):model.add(keras.layers.Dense(100, activation = "relu")) # 输出为100的全连接层model.add(keras.layers.BatchNormalization())
"""
如果要先归一化 再激活可以这么写
model.add(keras.layers.Dense(100))
model.add(keras.layers.BatchNormalization())
model.add(keras.layers.Activation('relu'))
""""""
Dropout:
dropout的作用就是防止网络的过拟合
这里我们使用AlphaDropout, AlphaDropout和dropout的区别是:
1.均值和方差不变
2.归一化性质不变
"""
model.add(keras.layers.AlphaDropout(rate=0.5))
model.add(keras.layers.Dense(10, activation = "softmax")) # 输出为 10的全连接层

对于批归一化,我们也可以使用“selu”激活函数来代替“relu”激活函数,因为"selu" 激活函数自带归一化, 所以使用"selu"的网络结构为:

model = keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape = [28, 28])) # flatten层的作用是将28*28维度的输入数据展平成一层
for _ in range(20):# selu是自带归一化的激活函数model.add(keras.layers.Dense(100, activation = "selu"))
model.add(keras.layers.Dense(10, activation = "softmax")) # 输出为 10的全连接层
2.5 模型编译与训练

这段代码与TensorFlow2.0(二)–Keras构建神经网络分类模型中的一样,不带赘述。

model.compile(loss = "sparse_categorical_crossentropy",  # 稀疏分类交叉熵损失函数optimizer = keras.optimizers.SGD(0.01),    # 优化函数为随机梯度下降 ,学习率为0.01metrics = ["accuracy"])                     # 优化指标为准确度
history = model.fit(x_train_scaled, y_train,             # 训练数据epochs = 10,                           # 训练周期,数据分为10次进行训练validation_data = (x_valid_scaled, y_valid),) # 验证集
2.6 模型验证

对于训练好的模型,我们可以使用model.evaluate()进行在验证集上的验证:

model.evaluate(x_test_scaled, y_test)

验证结果为:

loss为0.374, 准确度为87.67%

TensorFlow2.0(四)--Keras构建深度神经网络(DNN)相关推荐

  1. TensorFlow2.0(三)--Keras构建神经网络回归模型

    Keras构建神经网络回归模型 1. 前言 1. 导入相应的库 2. 数据导入与处理 2.1 加载数据集 2.2 划分数据集 2.3 数据归一化 3. 模型构建与训练 3.1 神经网络回归模型的构建 ...

  2. TensorFlow2.0(二)--Keras构建神经网络分类模型

    Keras构建分类模型 1. tf.keras简介 2. 利用tf.keras构建神经网络分类模型 2.1 导入相应的库 2.2 数据读取与展示 2.3 数据归一化 2.4 构建模型 2.5 模型的编 ...

  3. TensorFlow2.0(五)--Keras构建Wide Deep模型

    Keras构建Wide & Deep模型 1. Wide & Deep模型简介 2. Keras实现Wide & Deep模型 2.1 导入相应的库 2.2 数据集加载与处理 ...

  4. tensorflow2.0教程- Keras 快速入门

    tensorflow2.0教程-tensorflow.keras 快速入门 Tensorflow 2.0 教程持续更新: https://blog.csdn.net/qq_31456593/artic ...

  5. keras构建卷积神经网络_在python中使用tensorflow s keras api构建卷积神经网络的初学者指南...

    keras构建卷积神经网络 初学者的深度学习 (DEEP LEARNING FOR BEGINNERS) Welcome to Part 2 of the Neural Network series! ...

  6. 【小白学PyTorch】扩展之Tensorflow2.0 | 21 Keras的API详解(下)池化、Normalization

    <<小白学PyTorch>> 扩展之Tensorflow2.0 | 21 Keras的API详解(上)卷积.激活.初始化.正则 扩展之Tensorflow2.0 | 20 TF ...

  7. 【小白学PyTorch】扩展之Tensorflow2.0 | 21 Keras的API详解(上)卷积、激活、初始化、正则...

    [机器学习炼丹术]的学习笔记分享 <<小白学PyTorch>> 扩展之Tensorflow2.0 | 20 TF2的eager模式与求导 扩展之Tensorflow2.0 | ...

  8. keras构建卷积神经网络_在Keras中构建,加载和保存卷积神经网络

    keras构建卷积神经网络 This article is aimed at people who want to learn or review how to build a basic Convo ...

  9. TensorFlow2.0教程-keras 函数api

    TensorFlow2.0教程-keras 函数api Tensorflow 2.0 教程持续更新: https://blog.csdn.net/qq_31456593/article/details ...

最新文章

  1. 如何理解JS的单线程?
  2. Codeforces Round #Pi (Div. 2)(A,B,C,D)
  3. .NET Core TDD 前传: 编写易于测试的代码 -- 依赖项
  4. php外壳函数,php 方法笔记
  5. CMU 15-213 Introduction to Computer Systems学习笔记(8) Machine-Level Programming-Advanced
  6. 交易系统开发(六)——HFT高频交易
  7. delphi控件切图界面闪烁_ui界面切图方法
  8. Matlab回归分析获取预测变量的系数和p值和R2(仅一行代码)
  9. 游戏设计之路——游戏设计文档详解(GDD)
  10. Delphi Exif
  11. 在dhcp服务器上新建一个作用域需要定,在DHCP服务器上创建一个IP地址作用域,它的名称为“offi - 问答库...
  12. Linux文件系统层级结构图和vim中三个模式的命令
  13. Echarts实现省级到市级地图下钻
  14. 极验点选验证码位置识别(一):点选验证码位置识别技术总览
  15. web 前后台数据交互的方式
  16. 45-Jenkins-Sidebar Link插件实现添加侧边栏
  17. matlab 车辆 pdf,基于MATLAB的车辆工程仿真实例(Word+PDF+ePub+PPT)
  18. 怎么自己制作教师资格证照片?教你一键生成教资证件照
  19. Publisher/Subscriber 订阅-发布模式原理解析
  20. 外盘国际期货:隔夜股市、商品市场

热门文章

  1. 手把手教你IDEA使用GIT进行项目管理
  2. 纪念币预约服务器无响应,为啥纪念币从0点开约?
  3. php smarty 语法,php之Smarty根本语法和三大变量
  4. OpenHarmony开源项目
  5. php post请求 下载文件,POST请求 下载文件
  6. Java基础---方法1
  7. springboot+mybatis实现动态切换数据源
  8. python 装饰器(可以接收多个值)
  9. msp430入门编程21
  10. Java的native方法