【深度学习】嘿马深度学习笔记第5篇:神经网络与tf.keras,1.3 Tensorflow实现神经网络【附代码文档】

举报
程序员一诺python 发表于 2025/07/30 13:57:57 2025/07/30
【摘要】 2.2.4 指数加权平均 2.2.5 动量梯度下降法 2.2.6 RMSProp 算法 2.2.7 Adam算法 2.2.8 TensorFlow Adam算法API 2.2.9 学习率衰减 2.2.10 其它非算法优化的方式-标准化输入 2.2.11 神经网络调优 2.2.12 批标准化(Batch Normalization) 卷积神经网络 2.4 经典分类网络结构 学习目

教程总体简介:卷积神经网络、2.4 BN与神经网络调优、2.4 经典分类网络结构、2.5 CNN网络实战技巧、3.1 迁移学习案例、假定最后一层CNN的层输出为(None, 8, 8, 2048)、取每一个特征图的平均值作为输出、用以替代全连接层、100为类别、在__init__中添加、总结、每日作业、1.1 项目演示、1.2 开发环境搭建、3.2 目标检测任务描述、商品物体检测项目介绍、3.3 R-CNN、3.4 Fast R-CNN、3.5 Faster R-CNN、YOLO与SSD、3.6 YOLO(You only look once)、3.7 SSD(Single Shot MultiBox Detector)、商品检测数据集训练、5.2 标注数据读取与存储、5.3 训练、5.4 本地预测测试、5.6 Web与模型服务对接逻辑、5.5 模型导出、Docker部署环境使用介绍、5.7 TF Serving 与 Web开启服务、TensorFlow Client对接模型服务、Web Server开启、项目总结、模型导出与部署、深度学习课程、1.1 深度学习与机器学习的区别、深度学习的应用场景、1.2 深度学习框架介绍、深度学习介绍、2.1 TF数据流图、TensorFlow介绍、2.2 图与TensorBoard、2.4 张量、2.5 变量OP、1.2 神经网络基础、1.3 神经网络基础、1.4 神经网络原理、神经网络与tf.keras、1.3 Tensorflow实现神经网络

项目完整code和文档,小伙伴们---->git仓库


全套教程部分目录:

神经网络与tf.keras

1.3 Tensorflow实现神经网络

学习目标

  • 目标

  • 掌握Tensorflow API的使用

  • 应用

  • 应用TF搭建一个分类模型

1.3.1 TensorFlow keras介绍

Keras 是一个用于构建和训练深度学习模型的高阶 API。它可用于快速设计原型、高级研究和生产,具有以下三个主要优势:

  • 方便用户使用,快速构建模型 Keras 具有针对常见用例做出优化的简单而一致的界面。它可针对用户错误提供切实可行的清晰反馈。
  • 模块化和可组 将可配置的构造块连接在一起就可以构建 Keras 模型,并且几乎不受限制。

  • 导入:

import tensorflow as tf
from tensorflow import keras
  • 1、获取相关现有数据集(无需自己去构造)
  • keras.datasets

    • mnist:手写数字
    • fashion_mnist:时尚分类
    • cifar10(100):10个类别分类
fashion_mnist = keras.datasets.fashion_mnist

(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

print(train_images, train_labels)
  • 2、构建模型
  • 在 Keras 中,您可以通过组合层来构建模型。模型(通常)是由层构成的图。最常见的模型类型是层的堆叠,keras.layers中就有很多模型,如下图:可以在源码文件中找到
  • tf.keras.Sequential模型(layers如下)
from tensorflow.python.keras.layers import Dense
from tensorflow.python.keras.layers import DepthwiseConv2D
from tensorflow.python.keras.layers import Dot
from tensorflow.python.keras.layers import Dropout
from tensorflow.python.keras.layers import ELU
from tensorflow.python.keras.layers import Embedding
from tensorflow.python.keras.layers import Flatten
from tensorflow.python.keras.layers import GRU
from tensorflow.python.keras.layers import GRUCell
from tensorflow.python.keras.layers import LSTMCell
...
...
...
  • Flatten:将输入数据进行形状改变展开
  • Dense:添加一层神经元

  • Dense(units,activation=None,**kwargs)

    • units:神经元个数
    • activation:激活函数,参考tf.nn.relu,tf.nn.softmax,tf.nn.sigmoid,tf.nn.tanh
    • **kwargs:输入上层输入的形状,input_shape=()

tf.keras.Sequential构建类似管道的模型

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=tf.nn.softmax)
])
  • 3、训练与评估

  • 通过调用model的 compile 方法去配置该模型所需要的训练参数以及评估方法。

  • model.compile(optimizer,loss=None,metrics=None, 准确率衡):配置训练相关参数

    • optimizer:梯度下降优化器(在keras.optimizers)
from tensorflow.python.keras.optimizers import Adadelta
   from tensorflow.python.keras.optimizers import Adagrad
   from tensorflow.python.keras.optimizers import Adam
   from tensorflow.python.keras.optimizers import Adamax
   from tensorflow.python.keras.optimizers import Nadam
   from tensorflow.python.keras.optimizers import Optimizer
   from tensorflow.python.keras.optimizers import RMSprop
   from tensorflow.python.keras.optimizers import SGD
   from tensorflow.python.keras.optimizers import deserialize
   from tensorflow.python.keras.optimizers import get
   from tensorflow.python.keras.optimizers import serialize
   from tensorflow.python.keras.optimizers import AdamOptimizer()
  * loss=None:损失类型,类型可以是字符串或者该function名字参考:
from tensorflow.python.keras.losses import KLD
   from tensorflow.python.keras.losses import KLD as kld
   from tensorflow.python.keras.losses import KLD as kullback_leibler_divergence
   from tensorflow.python.keras.losses import MAE
   from tensorflow.python.keras.losses import MAE as mae
   from tensorflow.python.keras.losses import MAE as mean_absolute_error
   from tensorflow.python.keras.losses import MAPE
   from tensorflow.python.keras.losses import MAPE as mape
   from tensorflow.python.keras.losses import MAPE as mean_absolute_percentage_error
   from tensorflow.python.keras.losses import MSE
   from tensorflow.python.keras.losses import MSE as mean_squared_error
   from tensorflow.python.keras.losses import MSE as mse
   from tensorflow.python.keras.losses import MSLE
   from tensorflow.python.keras.losses import MSLE as mean_squared_logarithmic_error
   from tensorflow.python.keras.losses import MSLE as msle
   from tensorflow.python.keras.losses import binary_crossentropy
   from tensorflow.python.keras.losses import categorical_crossentropy
   from tensorflow.python.keras.losses import categorical_hinge
   from tensorflow.python.keras.losses import cosine
   from tensorflow.python.keras.losses import cosine as cosine_proximity
   from tensorflow.python.keras.losses import deserialize
   from tensorflow.python.keras.losses import get
   from tensorflow.python.keras.losses import hinge
   from tensorflow.python.keras.losses import logcosh
   from tensorflow.python.keras.losses import poisson
   from tensorflow.python.keras.losses import serialize
   from tensorflow.python.keras.losses import sparse_categorical_crossentropy
   from tensorflow.python.keras.losses import squared_hinge
  * metrics=None, ['accuracy']
  • model.fit():进行训练

    • (x=None,y=None, batch_size=None,epochs=1,callbacks=None)

    • x:特征值:

1Numpy array (or array-like), or a list of arrays
      2A TensorFlow tensor, or a list of tensors
      3、`tf.data` dataset or a dataset iterator. Should return a tuple of either `(inputs, targets)` or `(inputs, targets, sample_weights)`.
      4A generator or `keras.utils.Sequence` returning `(inputs, targets)` or `(inputs, targets, sample weights)`.
  * y:目标值

  * batch_size=None:批次大小

  * epochs=1:训练迭代次数

  * callbacks=None:添加回调列表(用于如tensorboard显示等)
model.compile(optimizer=tf.keras.optimizers.Adam(),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(train_images, train_labels, epochs=5)

model.evaluate(test_images, test_labels)

1.3.2 案例:实现多层神经网络进行时装分类

70000 张灰度图像,涵盖 10 个类别。以下图像显示了单件服饰在较低分辨率(28x28 像素)下的效果:

1.3.2.1 需求:

标签 类别
0 T 恤衫/上衣
1 裤子
2 套衫
3 裙子
4 外套
5 凉鞋
6 衬衫
7 运动鞋
8 包包

1.3.2.2 步骤分析和代码实现:

  • 读取数据集:

  • 从datasets中获取相应的数据集,直接有训练集和测试集

class SingleNN(object):

    def __init__(self):
        (self.train, self.train_label), (self.test, self.test_label) = keras.datasets.fashion_mnist.load_data()
  • 进行模型编写

  • 双层:128个神经元,全连接层10个类别输出

class SingleNN(object):

    model = keras.Sequential([
        keras.layers.Flatten(input_shape=(28, 28)),
        keras.layers.Dense(128, activation=tf.nn.relu),
        keras.layers.Dense(10, activation=tf.nn.softmax)
    ])

这里我们model只是放在类中,作为类的固定模型属性

激活函数的选择

涉及到网络的优化时候,会有不同的激活函数选择有一个问题是神经网络的隐藏层和输出单元用什么激活函数。之前我们都是选用 sigmoid 函数,但有时其他函数的效果会好得多,大多数通过实践得来,没有很好的解释性。

可供选用的激活函数有:

  • tanh 函数(the hyperbolic tangent function,双曲正切函数):

效果比 sigmoid 函数好,因为函数输出介于 -1 和 1 之间。

注 :tanh 函数存在和 sigmoid 函数一样的缺点:当 z 趋紧无穷大(或无穷小),导数的梯度(即函数的斜率)就趋紧于 0,这使得梯度算法的速度会减慢。

  • ReLU 函数(the rectified linear unit,修正线性单元)

当 z > 0 时,梯度始终为 1,从而提高神经网络基于梯度算法的运算速度,收敛速度远大于 sigmoid 和 tanh。然而当 z < 0 时,梯度一直为 0,但是实际的运用中,该缺陷的影响不是很大。

  • Leaky ReLU(带泄漏的 ReLU):

![](https

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。