政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(二)—— 深度神经网络
政安晨的个人主页:政安晨
欢迎 👍点赞✍评论⭐收藏
收录专栏: TensorFlow与Keras实战演绎
希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正!
概述
深度神经网络(Deep Neural Network,DNN)是一种机器学习模型,由多个神经网络层组成,每层都包含多个神经元节点。相比浅层神经网络,深度神经网络具有更多的隐藏层,能够处理更复杂的问题。
深度神经网络的核心思想是通过多层非线性变换来逐步提取输入数据的高级特征表示。每一层的神经元通过权重和偏置进行计算,并通过激活函数进行非线性映射。数据从输入层经过多个隐藏层传递,最终输出一个预测结果。
深度神经网络的训练通常使用反向传播算法。该算法通过计算预测结果与实际值之间的误差,并根据误差调整每一层中的权重和偏置,以提高模型的准确性。训练过程需要大量的数据和计算资源,但深度神经网络在图像识别、语音识别、自然语言处理等领域取得了很大的成功。
深度神经网络的发展得益于大数据和计算硬件的进步。随着深度学习领域的不断发展,出现了许多经典的深度神经网络模型,如卷积神经网络(Convolutional Neural Network,CNN)用于图像处理,循环神经网络(Recurrent Neural Network,RNN)用于序列数据处理,以及生成对抗网络(Generative Adversarial Network,GAN)用于生成新的数据等。
总之,深度神经网络是一种强大的机器学习模型,通过多层非线性变换和反向传播算法,能够学习到复杂的特征表示,广泛应用于各种领域的问题求解。
现在我们开始全面介绍深度神经网络,并通过它为网络添加隐藏层,揭示复杂关系。
引言
在这篇文章中,我们将看到如何构建能够学习深度神经网络著名的复杂关系的神经网络。
这里的关键思想是模块化,通过从简单的功能单元建立一个复杂的网络。
我们已经看到线性单元如何计算线性函数 - 现在我们将看到如何将这些单个单元组合和修改以模拟更复杂的关系。
层
神经网络通常将其神经元组织成层。当我们将具有共同输入集的线性单元集合在一起时,我们得到一个稠密层。
(一个由两个线性单元组成的密集层,接收两个输入和一个偏差。)
你可以将神经网络中的每一层看作是进行某种相对简单的转换。
通过一系列深层的层次,神经网络可以以越来越复杂的方式转变输入。在经过良好训练的神经网络中,每一层都是一个将我们逐渐接近解决方案的转换。
许多种层次
在 Keras 中,"layer" 是一种非常通用的概念。 一个 layer 本质上是一种数据转换方式。许多 layer,比如卷积层和循环层,通过使用神经元来转换数据,它们的主要区别在于它们所形成的连接模式。其他的 layer 则用于特征工程或者简单的算术运算。
激活函数
事实证明,两个没有任何中间层的密集层并不比单个密集层更好。密集层本身无法将我们从线条和平面的世界中移出。我们需要的是一些非线性的东西,我们需要的是激活函数。
没有激活函数,神经网络只能学习线性关系。为了拟合曲线,我们需要使用激活函数。
激活函数就是我们对于每个层的输出(激活)应用的一种函数。最常见的是修正线性单元函数max(0,x)。
整流器函数的图表是一条线,其负部分被"整流"为零。将这个函数应用于神经元的输出将使数据产生弯曲,使我们远离简单的直线。
当我们将整流器连接到线性单元时,我们得到一个整流线性单元或ReLU(修正线性单元)。因此,将整流函数称为"ReLU函数"是很常见的。
应用ReLU激活到线性单元意味着输出变为max(0, w * x + b),我们可以将其在图表中绘制如下:
堆叠密集层
现在我们有了一些非线性性,让我们看看如何堆叠层来进行复杂的数据转换。
(一堆密集层构成了一个“全连接”的网络。)
输出层之前的层有时被称为隐藏层,因为我们从未直接看到它们的输出。
现在,请注意最后(输出)层是一个线性单元(意味着没有激活函数)。
这使得这个网络适用于回归任务,我们试图预测某个任意数值。其他任务(如分类)可能需要在输出上使用激活函数。
构建序列模型
我们一直在使用的Sequential模型将按顺序连接一个层的列表:第一层获得输入,最后一层产生输出。这创建了上图所示的模型:
from tensorflow import keras
from tensorflow.keras import layersmodel = keras.Sequential([# the hidden ReLU layerslayers.Dense(units=4, activation='relu', input_shape=[2]),layers.Dense(units=3, activation='relu'),# the linear output layer layers.Dense(units=1),
])
请确保将所有的层一起作为一个列表传递,如[layer, layer, layer, ...],而不是作为单独的参数传递。要向层添加激活函数,只需在激活参数中给出其名称。
练习:一起创建一个深度神经网络
介绍
在这个练习中,我们将看到如何通过在Sequential模型中堆叠层来构建深度神经网络。通过在隐藏层后添加激活函数,我们使网络能够学习数据中更复杂(非线性)的关系。
您将构建一个具有多个隐藏层的神经网络,然后探索一些超出ReLU的激活函数。
代码如下:
import tensorflow as tf# Setup plotting
import matplotlib.pyplot as pltplt.style.use('seaborn-whitegrid')
# Set Matplotlib defaults
plt.rc('figure', autolayout=True)
plt.rc('axes', labelweight='bold', labelsize='large',titleweight='bold', titlesize=18, titlepad=10)# Setup feedback system
from learntools.core import binder
binder.bind(globals())
from learntools.deep_learning_intro.ex2 import *
在具体的数据集中,您的任务是根据不同配方预测混凝土的抗压强度。
下面这段中已经有数据集存在。(我们使用的Kaggle来进行演绎)
输入形状
这个任务的目标是'CompressiveStrength'列。其余列是我们将用作输入的特征。这个数据集的输入形状应该是什么?
# YOUR CODE HERE
input_shape = ____# Check your answer
q_1.check()# Lines below will give you a hint or solution code
#q_1.hint()
#q_1.solution()
定义一个具有隐藏层的模型
现在创建一个模型,其中包含三个隐藏层,每个隐藏层都有512个单元,使用ReLU激活函数。确保包括一个输出层,并且没有激活函数,并且将输入形状作为参数传递给第一层。
参考代码如下:
from tensorflow import keras
from tensorflow.keras import layers# YOUR CODE HERE
model = ____# Check your answer
q_2.check()# Lines below will give you a hint or solution code
#q_2.hint()
#q_2.solution()
我写了一个示例:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Densemodel = Sequential()
model.add(Dense(512, activation='relu', input_shape=(input_shape,)))
model.add(Dense(512, activation='relu'))
model.add(Dense(512, activation='relu'))
model.add(Dense(1, activation=None))
激活层
让我们来探索一些激活函数。
将激活函数附加到稠密层的常见方式是将其作为定义的一部分,并使用激活参数。然而有时候你可能希望在稠密层和其激活函数之间加入其他层。(我们将在第5课中使用批归一化的例子来看一个例子。)在这种情况下,我们可以使用自己的激活层来定义激活函数,如下所示:
layers.Dense(units=8),
layers.Activation('relu')
这与普通的方式完全相等:layers.Dense(units=8, activation='relu')。重写以下模型,使每个激活函数都在自己的激活层中。
### YOUR CODE HERE: rewrite this to use activation layers
model = keras.Sequential([layers.Dense(32, activation='relu', input_shape=[8]),layers.Dense(32, activation='relu'),layers.Dense(1),
])# Check your answer
q_3.check()# Lines below will give you a hint or solution code
#q_3.hint()
#q_3.solution()
可选:ReLU的替代方案
ReLU(Rectified Linear Unit)是一种常用的激活函数,它在神经网络中被广泛使用。然而,除了ReLU之外,还有一些替代方案可以用作激活函数,具体如下:
Sigmoid函数:Sigmoid函数将输入值映射到一个介于0和1之间的连续输出。它在早期的神经网络中广泛使用,但在深度神经网络中的性能较差。
Tanh函数:Tanh函数是双曲正切函数,它将输入值映射到一个介于-1和1之间的连续输出。与Sigmoid函数类似,Tanh函数在早期的神经网络中使用较多,但在深度神经网络中也存在梯度消失问题。
Leaky ReLU:Leaky ReLU是对ReLU的改进,它在负数输入时引入了一个小的斜率,以避免ReLU的神经元死亡问题。Leaky ReLU的数学表达式为f(x) = max(ax, x),其中a是一个很小的常数。
Parametric ReLU (PReLU):PReLU是对Leaky ReLU的进一步改进,它不是使用固定的斜率,而是将负数区域的斜率作为一个可学习的参数来确定。这使得神经网络可以更好地适应不同的数据集。
Exponential Linear Units (ELUs):ELU是一种具有负数区域的激活函数,类似于Leaky ReLU和PReLU,但它具有更平滑的曲线。ELU可以缓解梯度消失问题,并且在某些任务中比ReLU表现更好。
总而言之,虽然ReLU是最常用的激活函数之一,但在某些情况下,上述的替代方案可能会更适合特定的神经网络架构和任务。
“relu”激活函数的变体有很多,包括“elu”,“selu”和“swish”等,你可以在Keras中使用它们。在特定任务中,有时一个激活函数比另一个表现更好,因此在开发模型时可以考虑尝试不同的激活函数。ReLU激活函数在大多数问题上表现良好,因此是一个很好的起点。
让我们来看看其中几个图形。将激活函数从 'relu' 更改为上面提到的其他一种。然后运行单元格以查看图形。(查阅文档以获取更多想法。)
# YOUR CODE HERE: Change 'relu' to 'elu', 'selu', 'swish'... or something else
activation_layer = layers.Activation('relu')x = tf.linspace(-3.0, 3.0, 100)
y = activation_layer(x) # once created, a layer is callable just like a functionplt.figure(dpi=100)
plt.plot(x, y)
plt.xlim(-3, 3)
plt.xlabel("Input")
plt.ylabel("Output")
plt.show()
后面的文章中咱们将会学习到如何训练一个神经网络。
相关文章:

政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(二)—— 深度神经网络
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 概述 深度神经网络(Deep Neural Network…...

【链表】Leetcode 138. 随机链表的复制【中等】
随机链表的复制 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点…...

【计算机网络教程】(第六版)第2章课后习题答案
第二章 2-012-022-032-042-062-072-082-092-102-112-122-132-142-152-16 2-01 物理层要解决哪些问题?物理层的主要特点是什么? 答: 物理层要解决的主要问题: (1)物理层要尽可能地屏蔽掉物理设备和传输媒体&…...

抖音电商“达人客服”产品上线啦!超多作者邀你一起“321上客服”!
有问题别自己克服,来抖音电商找“达人客服” 当代年轻人购物,正在从机智省变成理智购。越来越多的人在达人直播间购物,看重的不止是优惠力度,还有服务保障。 为了帮助达人更好地服务用户,抖音电商上线了「达人客服」…...

华为防火墙二层墙(VAN/SVI/单臂路由)
二层墙只能做地址池形式的NAT。 交换机安全策略防火墙二层墙 路由器安全策略防火墙三层墙 交换机的光口是不能直接插线的,光模块,包括进和出 长距离:单模 短距离:多模 防火墙自身的ping流量需要单独配置...

idea使用git笔记
1.创建分支和切换分支 创建分支 切换分支 2.把新创建的分支提交到远程服务器上(注:如果没有提交的,随便找个文件修改再提交) (1)切换到要提交的分支,add (2)commit (3)push 3.在自己分支修改代码及提交到自己的远…...

智慧校园数据可视化有什么好处?怎么推进数字化校园方案?
在当今数字化时代,越来越多学校开始实施智慧校园计划,旨在为学生和教师提供更高效、便捷的学习和教学环境。智慧校园运用互联网、大数据、人工智能等技术,对校园内各信息进行收集、整合、分析和应用,实现教学、管理、服务等多方面…...

如何利用python编写函数fn(a,n)求数列和
1 问题 编写函数fn(a,n) 求aaaaaa⋯aa⋯aa(n个a)之和,fn须返回的是数列和,输入正整数a和n的值(两个值都不超过9),并输出fn(a,n)的结果值。 2 方法 运用def 定义函数和for 循环递归方法: 先定义fn(a,n)函数;…...

django orm DateTimeField 6位小数精度问题
from django.db.backends.mysql.base import DatabaseWrapperDatabaseWrapper.data_types[DateTimeField] "datetime"意思就是重写源码里面的DateTimeField字段...

JVM(六)——内存模型与高效并发
内存模型与高效并发 一、java 内存模型 【java 内存模型】是 Java Memory Model(JMM) 简单的说,JMM 定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序 性、和原子性的规则和保障…...

C++:关键字(4)
在c中的关键字就是我们各个写的各种代码 这些就是关键字,这些东西是无法当参数的,比如在给变量名设置为int那就不行 这就是个错的 在写其他的参数时候,不可以使用关键词作为参数...

STM32串口收发单字节数据原理及程序实现
线路连接: 显示屏的SCA接在B11,SCL接在B10,串口的RX连接A9,TX连接A10。 程序编写: 在上一个博客中实现了串口的发送代码,这里实现串口的接收代码,在上一个代码的基础上增加程序功能。 Seiral.…...

openGauss + Datakit搭建openGauss运维平台
系统架构OS 硬件需求:2c4g [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# uname -m x86_64 [rootlocalhost ~]# hostname -I 192.168.92.32 下载地址:https://opengauss.org/zh/download/ 下载…...

【疑惑】-谷歌是如何获取数据的
搜索引擎爬虫: 谷歌的搜索引擎通过爬虫程序在互联网上爬取和收集网页信息。这些爬虫会遵循特点的算法和规则,访问内容,并且提取出关键信息 用户的搜索行为: 当用户使用谷歌搜索引擎进行搜索的时候,谷歌会收集分析用户…...

Java static和继承
static特点 Java中的static关键字允许在没有创建类的实例的情况下进行调用。以下是static关键字的主要用途和特点: 静态变量(类变量):使用static关键字声明的变量称为静态变量或类变量。这些变量属于类本身,而不是类…...

亲身体验!人工智能对话无障碍 —— BRClient 使用指南
01 概述 BRClient 这个名字来源于“Bedrock Client”的简称,寓意是为用户提供一个坚实的基础。BRClient 作为一个开源的桌面应用,为用户提供了友好的图形界面,让每个人都能够轻松访问和使用 Claude 3 的强大功能。用户可以自定义 Claude 3 的…...

【数据库管理操作】Mysql 创建学生数据库及对数据表进行修改
MySQL 创建学生成绩数据库 1.创建数据库 create database studentscore;创建完成之后,如果需要使用该数据,使用use命令 use studentscore;创建表前查看当前数据库中包含的表 show tables; 2.创建bclass表 create table bclass( class_id char(8) …...

vue2 export default写法,computed、methods的使用
<template><div><h2>{{nameAll}}</h2><h2>{{method}}</h2><h2>{{tt()}}</h2><h2>{{firstName}}</h2><h2>更新后赋值数据:{{lastName}}</h2><h2>赋值数据:{{writeValue}}</h2>…...

负氧离子监测站:创造健康生活环境
TH-FZ5在蓝天白云之下,那一座座高耸的全彩屏负氧离子监测站,如同一支支科技的绿芽,静静破土而出,为这片土地带来了新的生命力。这些现代化的设备不仅美化了环境,更是我们呼吸健康守护者,它们的存在让我们的…...

【jvm】young gc full gc
何时触发YoungGC或FullGC YoungGC的触发时常在发生,当新生代的Eden区满了之后就会触发YoungGC。 FullGC在多个情况下都会被触发: 1、发生Young GC之前进行检查,如果“老年代可用的连续内存空间” < “新生代历次Young GC后升入老年代的对象…...

2024年腾讯云服务器租用价格_轻量和CVM报价
腾讯云服务器价格表2024年最新价格,轻量2核2G3M服务器61元一年、2核2G4M服务器99元1年,三年560元、2核4G5M服务器165元一年、3年900元、轻量4核8M12M服务器646元15个月、4核16G10M配置32元1个月、8核32G配置115元1个月,345元3个月。CVM云服务…...

【go从入门到精通】for循环控制
作者简介: 高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C,go等语言开发经验,mysql,mongo,redis等数据库,设计模…...

<chrono>, clock_gettime(), gettimeofday()对比
精度(Precision): <chrono>: 提供了纳秒级别的精度,可以满足大多数应用的需求。clock_gettime(): 提供了纳秒级别的精度,与 <chrono> 相当。gettimeofday(): 提供了微秒级别的精度,相对于前两者…...

基于 YAML 接口自动化测试框架设计
在设计自动化测试框架的时候,我们会经常将测试数据保存在外部的文件(如Excel、YAML、CSV),或者数据库中,实现脚本与数据解耦,方便后期维护。目前非常多的自动化测试框架采用通过Excel或者YAML文件直接编写测…...

团体程序设计天梯赛 L2-031 深入虎穴
L2-3深入虎穴 分数 25 名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报。已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门。每一扇门背后或者是一个房间,或者又有很多条路&a…...

基于Givens旋转完成QR分解进而求解实矩阵的逆矩阵
基于Givens旋转完成QR分解进而求解实矩阵的逆矩阵 目录 前言 一、Givens旋转简介 二、Givens旋转解释 三、Givens旋转进行QR分解 四、Givens旋转进行QR分解数值计算例子 五、求逆矩阵 六、MATLAB仿真 七、参考资料 总结 前言 在进行QR分解时,HouseHolder变换…...

学习使用xbox手柄控制小乌龟节点移动
使用xbox手柄控制小乌龟,首先要下载joy功能包,发布sensor_msgs话题也就是手柄和ros通信的话题。 下载的步骤就根据官方文档即可 joy/Tutorials/ConfiguringALinuxJoystick - ROS Wiki 这里我提供一下具体步骤 第一步 安装joy 首先安装对应系统版本的…...

OpenLayers6实战,OpenLayers绘制特殊图形,OpenLayers绘制四角形(菱形),OpenLayers绘制菱形
专栏目录: OpenLayers实战进阶专栏目录 前言 本章讲解如何使用OpenLayers6实现绘制特殊图形,以绘制四角形(菱形),OpenLayers绘制菱形的功能为例。 本章核心代码不依赖任何第三方插件,只依赖OpenLayers。 需要注意的是两个操作按钮需要引入ElementUI 二、依赖和使用 &q…...

虚拟机如何在原有磁盘上扩容
虚拟机未开启状态–菜单栏–虚拟机–快照–拍摄快照–拍摄快照– 菜单栏–虚拟机–快照–快照管理器–点击刚刚的快照1–删除–是– 文件–新建或者打开–硬盘(以本人Win 10.64.3GL为例)–虚拟机设置–硬件– 硬盘(SATA)–磁盘实…...

2024-03-27 作业
作业要求: 整理课上代码整理思维导图完成下面类 作业1: 完成了 作业2: 作业3: class myString {private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度public://无参构造myString():si…...