04_深度学习与tf.keras基础API总结

本文介绍了深度学习的基础概念,包括其计算本质、分类与回归问题,并深入探讨了tf.keras框架的应用,涵盖Sequential模型的定义、编译及训练过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 深度学习基本问题

1.1 什么是深度学习

深度学习允许由多个处理层组成的计算模型来学习具有多个抽象级别的数据表示,这些方法极大地改善了语音识别,视觉对象识别,物体检测以及药物发现和基因组学等许多其他领域的最新技术。深度学习通过使用反向传播算法来指示机器应如何更改其内部参数(用于从前一层中的表示)计算每个层中的表示来发现大数据集中的复杂结构。

  • 深度学习出发点:数据+任务。确定任务后获取相应的数据集,数据集形成的过程中往往伴随着噪声数据,噪声是相对于每一个任务来说,因为可能不同的任务对同一份数据集的需求是不一样的。因此数据基于任务的目标可以分成两部分,即有价值的数据和噪声。深度学习的每一个Layer就是用来放大前者,抑制后者的,经过一系列的Layer之后,数据中最有用的部分被提取出来,之后再进行相应目标的任务会特别简单,这就是深度学习。

1.2 深度学习计算的本质

在计算机,或者说在TensorFlow中,深度学习计算的本质是张量(Tensor)的计算,每一层Layer都是数据的一系列几何变换,这是使得复杂问题简单化的过程(放大数据中的价值,抑制噪声),深度学习的训练过程就是一系列的几何变换的搜索过程。所谓的搜索过程,就是一开始几何变换的方法是未知的(或者说模型的权重参数是未知的),但是可以通过数据来反推应该如何进行变换,使得经过变换后的数据更加有用。

1.3 分类问题与回归问题

分类问题预测的是目标的类别,模型的输出是每个类别的概率分布,比如对于三分类的问题,模型的输出可能是 [0.1,0.1,0.8],不同的索引对应不同的类别,它的类别就是值最大的那个索引,在前面的例子中,模型给出的结果类别就是索引 [2] 位置对应的类别。

回归问题预测的是一个值,例如房价等连续变量

1.4 神经网络的基本要素

  • 输入数据(InputData)InputData真正决定了任务实现的上限,学术界都是在数据规定好的上限内通过一定的算法逼近上限,工业界由于各家数据不同,上限也各不相等。

  • 网络层(Layer)Layer是神经网络的基本数据结构,它是一个数据处理的模块,数据(一个或者多个Tensor)经过一个Layer转换成一个或者多个Tensor。大部分Layer是有状态的,其状态的表示就是层的权重(weights),如卷积层,全连接层。少部分层是没有状态的,如池化层。每一层的权重就是通过LossOptimizer学习到的"知识"。

  • 模型(Model)Model是一系列Layer连接而成的有向无环图,模型的拓扑结构决定了搜索空间,搜索空间过大会导致很难找到合适的数据表示,搜索空间太小容易导致数据表示的表达效果上限很低。

  • 损失函数(Loss):深度学习中的参数是逐步调整的,让预测值逐步逼近真实值,Loss可以帮助衡量模型的好坏,它决定了训练的反馈信号。对于分类问题来说,Loss需要衡量出目标类别与当前预测的差距,例如对于一个三分类问题来说,假设模型输出为 [0.1,0.1,0.8],真实分类是 2,则需要将 2 通过独热编码(one-hot)变成一个分布 [0,0,1],这时候就可以计算 [0.1,0.1,0.8],[0,0,1] 这两个向量的距离。对于回归问题来说,因为预测结果直接就是一个值,因此只需衡量出两个值之间的差距。

  • 优化器(Optimizer):Optimizer决定了如何利用反馈信号,即Loss去调整模型。

2. tf.keras基础

2.1 keras工作流

导入数据
数据处理
定义模型
编译模型
训练模型
导出模型
应用模型

2.2 keras主要模块

DatasetModelLayerLossOptimizerMetrics

这里有一个小 trick,就是在TensorFlow官网中查询keras相关资料时之能查到很少的东西,因此想查询api具体的解释建议去 keras官网 来查询。还有就是往往随着版本的升级,可能本来在这个模块下的一个函数,被弄到了另一个模块下,导致函数本身是有的,但是导入的时候却找不到,这个时候只要去搜索这个函数,就会看到这个函数当前在哪个模块下。以下内容参考了keras官方中文文档

3.Sequential Model

tf.keras中的Sequential Modelkeras三大模型方法中为最简单的,它只支持线性的结构顺序,因此不支持定义多输入和多输出的模型,它是多个网络层(卷积层,池化层,Dropout层等)的线性堆叠

Sequential Model的相关方法文档链接:

3.1 模型定义

模型定义主要有两种方法:构造函数定义或者通过model.add方法。

构造函数定义是在实例化Sequential对象的时候就将各个层通过一个列表传进去,如下面的代码:

model = Sequential([
    Dense(units=200,input_dim=784,bias_initializer='one',kernel_regularizer=l2(0.0003),activation='tanh'),
    Dropout(0.4),
    Dense(units=100,input_dim=200,bias_initializer='one',kernel_regularizer=l2(0.0003),activation='tanh'),
    Dropout(0.4),
    Dense(units=10,input_dim=100,bias_initializer='one',kernel_regularizer=l2(0.0003),activation='softmax'),
])

add方法,实例化好Sequential对象可以调用该方法以向网络中添加新的层:

model = Sequential()
model.add(Dense(units=200,input_dim=784,bias_initializer='one',
				kernel_regularizer=l2(0.0003),activation='tanh'))
model.add(Dropout(0.4))
model.add(Dense(units=100,input_dim=200,bias_initializer='one',
				kernel_regularizer=l2(0.0003),activation='tanh'))
model.add(Dropout(0.4))
model.add(Dense(units=10,input_dim=100,bias_initializer='one',
				kernel_regularizer=l2(0.0003),activation='softmax'))

3.2 keras网络层

Keras网络层的相关方法文档链接:

3.2.1 Dense层

https://keras-zh.readthedocs.io/layers/core/

Dense层即全连接层,主要参数:

  • units: 正整数,输出的维度。
  • activation: 激活函数, 若不指定,则不使用激活函数。
  • bias_initializer: 偏置向量的初始化器。
  • kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数。

使用示例:

model.add(Dense(units=200,input_dim=784,bias_initializer='one',
				kernel_regularizer=l2(0.0003),activation='tanh'))
3.2.2 Dropout层

https://keras-zh.readthedocs.io/layers/core/

主要参数:

  • rate: 在 0 和 1 之间,需要丢弃的输入比例。

使用示例:

model.add(Dropout(0.25))
3.2.3 卷积层Conv2D

https://keras-zh.readthedocs.io/layers/convolutional/

主要参数:

  • input_shape: 输入大小,模型的第一个卷积层需要指定该参数。
  • filters: 巻积核个数。
  • kernel_size:卷积核大小。
  • strides:卷积步长。
  • padding:padding方式。
  • activation:激活函数。

使用示例:

model.add(Conv2D(64,3,strides=2,padding='same',activation = 'relu'))
3.2.4 最大池化层MaxPooling2D

https://keras-zh.readthedocs.io/layers/pooling/

主要参数:

  • pool_size:池化尺寸。
  • strides:池化步长。
  • padding:补足方式。

使用示例:

model.add(MaxPooling2D(2,2,'same'))
3.2.5 拉平Flatten

https://keras-zh.readthedocs.io/layers/core/

使用示例:

model.add(Flatten())

3.3 模型编译

模型的层添加好的可以使用compile方法来编译模型,例如

model.compile(optimizer='sgd',loss='categorical_crossentropy',metrics=['accuracy'])

其中optimizer指示优化器,loss指示损失函数,metrics指示评估标准,这些可以定制化。

主要参数:

  • optimizer: 字符串(优化器名)或者优化器对象。详见https://keras.io/optimizers/
  • loss: 字符串(目标函数名)或目标函数。详见 https://keras.io/losses/。 如果模型具有多个输出,则可以通过传递损失函数的字典或列表,在每个输出上使用不同的损失。模型将最小化的损失值将是所有单个损失的总和。
  • metrics: 在训练和测试期间的模型评估标准。通常你会使用 metrics = ['accuracy']。 要为多输出模型的不同输出指定不同的评估标准,还可以传递一个字典,如 metrics = {'output_a':'accuracy'}
  • loss_weights: 指定标量系数(Python浮点数)的可选列表或字典,用于加权不同模型输出的损失贡献。 模型将要最小化的损失值将是所有单个损失的加权和,由 loss_weights系数加权。 如果是列表,则期望与模型的输出具有 1:1 映射。 如果是张量,则期望将输出名称(字符串)映射到标量系数。
  • sample_weight_mode: 如果你需要执行按时间步采样权重(2D 权重),请将其设置为temporal。 默认为None,为采样权重(1D)。如果模型有多个输出,则可以通过传递 mode 的字典或列表,以在每个输出上使用不同的 sample_weight_mode
  • weighted_metrics: 在训练和测试期间,由 sample_weightclass_weight评估和加权的度量标准列表。
  • target_tensors: 默认情况下,keras将为模型的目标创建一个占位符,在训练过程中将使用目标数据。相反,如果你想使用自己的目标张量(反过来说,keras在训练期间不会载入这些目标张量的外部 Numpy数据),可以通过 target_tensors参数指定它们。对于单输出 Sequential模型来说,它应该是单个张量。

3.4 模型训练

模型编译好后就可以开始训练,训练使用的是fit方法,里面需要指定训练集,可以配置batch_size和训练轮次,如下:

model.fit(x_train_data,y_train_data,batch_size=64,epochs=100)
  • model.fit返回一个 History对象。其 History.history属性是连续 epoch 训练损失和评估值,以及验证集损失和评估值的记录(如果适用)。

4. 总结

  • 选择tf.keras
  • tf/keras是武器,MachineLearningDeepLearning是内功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值