百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

适用于深度学习初学者的深度学习模板

bigegpt 2024-11-10 08:27 41 浏览

深度学习备忘单(图片来自我的网站)

什么是深度学习?

深度学习是使用神经网络的机器学习模型的一个子类别。简而言之,神经网络连接多层节点,每个节点都可以被视为迷你机器学习模型。然后,模型的输出作为后续节点的输入进给。

深度学习模型(图片由作者提供)

TensorFlow是一个Python库,主要专注于提供深度学习框架。要安装和导入TensorFlow库:

pip install tensorflow
import tensorflow as tf

如何构建TensorFlow深度神经网络

深度学习模型的骨架通常遵循以下结构,我们可以使用Keras API来实现一个对初学者友好的深度学习模型。我们可以在每个阶段添加很多变化,使模型更加复杂。

  1. 准备数据集:数据准备和特征工程技术
  2. 定义模型:模型类型、层数和单位数、激活函数
  3. 编译模型:优化器、学习率、损失函数、指标
  4. 适合模型:批量大小,纪元
  5. 评估和预测:评估指标

从我网站上的代码片段部分获取代码模板。

1.准备数据集

深度学习从根本上说是一种机器学习算法,由监督学习和无监督学习组成。对于监督学习,它需要将数据集拆分为训练和测试集(有时也涉及验证集),如下所示。

从sklearn.model_selection导入train_test_split
X = df.drop(['user-definedlabeln'], axis=1)
y = df['user-definedlabeln']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

您可以使用原始数据集做更多事情,例如预处理和功能工程,但让我们在本文中保持简单。

2.定义模型

深度学习神经网络最简单的形式之一是顺序模型,它由单个层组成,每层只有一个输入张量和一个输出张量。我们可以通过传递多个密集层来创建顺序模型。

顺序模型(作者的图像)

model = tf.keras.models.Sequential([
keras.layers.Dense(units=32, activation="sigmoid"),
keras.layers.Dense(units=16, activation="sigmoid"),
keras.layers.Dense(单位=1,激活="ReLU")
】)

层数和单元数:深度学习模型必须有一个输入层和一个输出层。输入和输出之间的隐藏层数量可能会有所不同。每层的单位数也是我们可以实验的超参数。文章“如何配置神经网络中的层数和节点数”提供了有关如何实验和执行搜索以确定层数和节点数的指南。

激活功能:模型的每一层都需要一个激活功能。您可以将其视为将节点输入转换为输出的迷你统计模型。激活函数有助于神经网络的非线性。隐藏层通常应用相同的激活功能,输出层可以具有不同的功能,这取决于它是分类还是回归预测。

以下是常见的激活功能,每个功能都有其优点和缺点。

  • Sigmoid:从0到1不等,sigmoid适合二进制分类
  • ReLU:它保留了线性行为,并解决了Sigmoid和Tanh中消失的梯度问题,但当输入为负时,它可能会遇到其他问题,如饱和或死单位
  • Tanh:更强的梯度使其对微小差异更敏感,但它存在极端值的饱和度和缓慢学习率的问题
  • 线性:它适用于具有连续数字输出的回归问题

激活功能(作者图片)

推荐阅读:如何选择深度学习的激活功能

3.编译模型

深度学习模型使用反向扩展来学习。简而言之,它从预测错误中学习,并调整分配给每个节点的权重,以尽量减少预测错误。在编译模型的阶段,我们需要指定用于测量误差的损失函数,以及用于减少损失的优化器算法。

from tensorflow.keras.optimizers import RMSprop
model.compile(optimizer= RMSprop(learning_rate=0.001), loss="binary_crossentropy", metrics=['accuracy'])

优化器:优化器定义了用于优化模型的优化算法,以减少误差。简要介绍一些优化器的例子:

  • 梯度下降:它通过根据函数的梯度更新参数来最小化损失函数
  • 随机梯度下降:一种流行的梯度下降变体,更新每个训练示例的参数
  • RMSProp:它计算自适应学习率,通常用于循环神经网络
  • 动量:它借鉴了物理学的想法,即学习速度根据梯度方向进行适应,从而导致更快的收敛
  • Adam:它结合了RMSPropMomentum的优势并且在处理大型数据集时效率高

推荐阅读:

深度学习优化器综合指南

梯度下降优化算法概述

我们还需要为优化器指定学习率,因为它决定了更新参数/权重的速度,以尽量减少损失函数的结果。我们可以在二维空间中可视化损失函数,如下所示,优化器的目标是找到最小误差点。如果学习率太高,我们可能会跳过最低点,无法收敛。然而,如果学习率太低,可能需要很长时间才能达到最小损失。

大步长与小步长(图片由作者提供)

损失函数:损失函数测量错误率,并提供模型性能评估。在深度学习模型中,分类预测与回归预测需要不同的损失函数:

  • 分类问题的损失函数:“binary_crossentropy”,“hinge”...
  • 回归问题的损失函数:“mean_squared_error”,“mean_squared_logarithmic_error”,“mean_absolute_error”

指标:它是每次培训迭代后生成的评估指标,可以作为列表传递。我们可以使用上面的损失函数,也可以添加“准确性”、“auc”用于分类,“rmse”、“cosine”用于回归。

推荐阅读:Keras丢失功能:你需要知道的一切

4.适合模型

model.fit()函数将训练数据集X_train和训练标签y_train适合于模型。培训过程的复杂性也受到纪元和批次大小的控制。

model.fit(X_train,y_train,epochs = 15,batch_size = 10)

批次和纪元(图片由作者提供)

纪元:它控制完成培训所需的整个培训集的迭代次数。

batch_size:它决定了更新模型参数需要多少训练样本。如果batch_size与训练集的大小相同,模型将使用整个训练数据集来更新模型参数。如果batch_size = 1,它将使用每个数据点来更新模型参数。

推荐阅读:大纪元vs批量大小vs迭代

5.评估和预测

请记住,我们最初将整个数据集拆分为训练和测试。测试集已从整个模型构建过程中被遗漏。这是因为我们需要使用持有测试数据集来评估其在看不见的数据上的性能。只需通过以下测试数据集,它就会返回在模型编译阶段指定的模型评估指标。

model.evaluate(X_test,y_test)

一旦你对模型性能感到满意,你就可以部署它进行预测。

model.predict(predict_data)

当前模型只能被视为基线模型,并且仍然可以进行许多改进来提高其准确性。本文提供了提高深度学习基线模型性能的有用指南:如何提高深度学习性能。

谢谢你走到尽头。如果您想阅读更多我在Medium上的文章,我将非常感谢您的支持,注册Medium会员??

带回家留言

本文介绍了初学者的深度学习模板。在每个阶段,我们可以通过对超参数进行实验来增加神经网络模型的变异和复杂性:

  1. 准备数据集:数据预处理和特征工程技术
  2. 定义模型:模型类型、层数和单位数、激活函数
  3. 编译模型:优化器、学习率、损失函数、指标
  4. 适合模型:批量大小,纪元
  5. 评估和预测

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...