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

news2024/11/16 13:52:45

本教程的知识点为:深度学习介绍 1.1 深度学习与机器学习的区别 TensorFlow介绍 2.4 张量 2.4.1 张量(Tensor) 2.4.1.1 张量的类型 TensorFlow介绍 1.2 神经网络基础 1.2.1 Logistic回归 1.2.1.1 Logistic回归 TensorFlow介绍 总结 每日作业 神经网络与tf.keras 1.3 神经网络基础 神经网络与tf.keras 1.3 Tensorflow实现神经网络 1.3.1 TensorFlow keras介绍 1.3.2 案例:实现多层神经网络进行时装分类 神经网络与tf.keras 1.4 深层神经网络 为什么使用深层网络 1.4.1 深层神经网络表示 卷积神经网络 3.1 卷积神经网络(CNN)原理 为什么需要卷积神经网络 原因之一:图像特征数量对神经网络效果压力 卷积神经网络 3.1 卷积神经网络(CNN)原理 为什么需要卷积神经网络 原因之一:图像特征数量对神经网络效果压力 卷积神经网络 2.2案例:CIFAR100类别分类 2.2.1 CIFAR100数据集介绍 2.2.2 API 使用 卷积神经网络 2.4 BN与神经网络调优 2.4.1 神经网络调优 2.4.1.1 调参技巧 卷积神经网络 2.4 经典分类网络结构 2.4.1 LeNet-5解析 2.4.1.1 网络结构 卷积神经网络 2.5 CNN网络实战技巧 2.5.1 迁移学习(Transfer Learning) 2.5.1.1 介绍 卷积神经网络 总结 每日作业 商品物体检测项目介绍 1.1 项目演示 商品物体检测项目介绍 3.4 Fast R-CNN 3.4.1 Fast R-CNN 3.4.1.1 RoI pooling YOLO与SSD 4.3 案例:SSD进行物体检测 4.3.1 案例效果 4.3.2 案例需求 商品检测数据集训练 5.2 标注数据读取与存储 5.2.1 案例:xml读取本地文件存储到pkl 5.2.1.1 解析结构

完整笔记资料代码->:https://gitee.com/yinuo112/AI/tree/master/深度学习/嘿马深度学习笔记/note.md

感兴趣的小伙伴可以自取哦~


全套教程部分目录:


部分文件图片:

神经网络与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:特征值:

1、Numpy array (or array-like), or a list of arrays
      2、A 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)`.
      4、A 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 需求:

标签类别
0T 恤衫/上衣
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):

Leaky ReLU 保证在 z < 0 的时候,梯度仍然不为 0。理论上来说,Leaky ReLU 有 ReLU 的所有优点,但在实际操作中没有证明总是好于 ReLU,因此不常用。

为什么需要非线性的激活函数

使用线性激活函数和不使用激活函数、直接使用 Logistic 回归没有区别,那么无论神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,就成了最原始的感知器了。

a [ 1 ] = z [ 1 ] = W [ 1 ] x + b [ 1 ] a^{[1]} = z^{[1]} = W^{[1]}x+b^{[1]} a[1]=z[1]=W[1]x+b[1]

a [ 2 ] = z [ 2 ] = W [ 2 ] a [ 1 ] + b [ 2 ] {a}^{[2]}=z^{[2]} = W^{[2]}a^{[1]}+b^{[2]} a[2]=z[2]=W[2]a[1]+b[2]

那么这样的话相当于

a [ 2 ] = z [ 2 ] = W [ 2 ] ( W [ 1 ] x + b [ 1 ] ) + b [ 2 ] = ( W [ 2 ] W [ 1 ] ) x + ( W [ 2 ] b [ 1 ] + b [ 2 ] ) = w x + b {a}^{[2]}=z^{[2]} = W^{[2]}(W^{[1]}x+b^{[1]})+b^{[2]}=(W^{[2]}W^{[1]})x+(W^{[2]}b^{[1]}+b^{[2]})=wx+b a[2]=z[2]=W[2](W[1]x+b[1])+b[2]=(W[2]W[1])x+(W[2]b[1]+b[2])=wx+b

  • 编译、训练以及评估
def compile(self):

        SingleNN.model.compile(optimizer=tf.train.AdamOptimizer(),
                               loss=tf.keras.losses.sparse_categorical_crossentropy,
                               metrics=['accuracy'])
        return None

    def fit(self):

        SingleNN.model.fit(self.train, self.train_label, epochs=5)

        return None

    def evaluate(self):

        test_loss, test_acc = SingleNN.model.evaluate(self.test, self.test_label)

        print(test_loss, test_acc)

        return None

1.3.2.1 打印模型

  • model.summary():查看模型结构

1.3.2.2 手动保存和回复模型

  • 目的:防止训练长时间,出现意外导致重新训练
  • model.save_weights('./weights/my_model')
  • model.load_weights('./weights/my_model')
SingleNN.model.save_weights("./ckpt/SingleNN")

def predict(self):

    # 直接使用训练过后的权重测试
    if os.path.exists("./ckpt/checkpoint"):

        SingleNN.model.load_weights("./ckpt/SingleNN")

    predictions = SingleNN.model.predict(self.test)

    print(np.argmax(predictions, 1))

    return

1.3.2.3 添加Tensorboard观察损失等情况

# 添加tensoboard观察


        tensorboard = keras.callbacks.TensorBoard(log_dir='./graph', histogram_freq=0,
                                                  write_graph=True, write_images=True)

        SingleNN.model.fit(self.train, self.train_label, epochs=5, callbacks=[tensorboard])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2076358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

介绍云计算在医疗领域的应用实例

云计算在医疗领域的应用日益广泛&#xff0c;为医疗行业带来了诸多便利和创新。以下是几个典型的应用实例&#xff1a; 电子病历管理系统&#xff1a; 基于云计算技术的电子病历管理系统&#xff0c;通过互联网实现对病历数据的存储、管理、维护和查询等功能。这类系统能够自动…

关于助记词,词库的讨论

我有个想法&#xff0c;既然私钥碰撞的难度大。 -seed-&#xff08;pathmasterkey&#xff09;-privatekey-publickey-address 通过反推的难度大&#xff0c;那我可以尝试使用助记词碰撞 就例如&#xff0c;我生成1000个eth地址 1000个地址的助记词全部拿到&#xff0c;然后…

C++学习笔记——打印ASCII码

一、题目描述 二、代码 #include <iostream> using namespace std; int main() {char a_char;int a_int;cin >> a_char;a_int a_char;cout << a_int;return 0; }

【数据结构】关于TreeMap与TreeSet的使用你了解多少???

前言&#xff1a; &#x1f31f;&#x1f31f;本期讲解TreeMap与Set的相关知识&#xff0c;希望能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;http://t.csdnimg.cn/K1moi &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 目录 &am…

开源模型应用落地-LangChain实用小技巧-使用各种Loader高效解析不同数据源(七)

一、前言 在 LangChain框架中&#xff0c;提供了Loader机制&#xff0c;以统一的方式来从各种数据源获取数据&#xff0c;使得开发人员可以方便地集成不同类型的数据源&#xff0c;而无需为每种数据源编写特定的加载代码。它可以将不同格式的数据转换为 LangChain 可以处理的统…

如何使用ssm实现新锐台球厅管理系统的设计与实现+vue

TOC ssm221新锐台球厅管理系统的设计与实现vue 系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等…

Python(R)均方根误差平均绝对误差导图

&#x1f3af;要点 回归模型评估指标评估薪水预测模型评估员工倦怠率模型评估大气分析生成式对抗模型目标对象缺失下&#xff0c;性能估算法追踪模型误差指标降尺度大气学模拟模型准确性评估蛋白染色质相互作用模型评估 Python回归误差指标 平均绝对误差表示数据集中实际值和…

Manim实现目标的移动和出现速度控制

一&#xff0c;介绍 缓动函数 自定义参数随时间变化的速率。 现实生活中&#xff0c;物体并不是突然启动或者停止&#xff0c; 当然也不可能一直保持匀速移动。就像我们 打开抽屉的过程那样&#xff0c;刚开始拉的那一下动作很快&#xff0c; 但是当抽屉被拉出来之后我们会不自…

TCP协议中断开连接机制

目录 客户端与服务端四次挥手 关于TIME_WAIT状态 为什么TIME_WAIT状态等待的时间是2MSL&#xff1f; 客户端与服务端四次挥手 基于TCP协议通信的客户端与服务端断开连接就要进行四次挥手&#xff0c;如下图&#xff1a; 四次挥手过程中客户端与服务端状态转化&#xff1a; …

Rocm-Programming with HIP 内存分配

1. 主机内存&#xff08;Host Memory&#xff09; hipHostMalloc 是 HIP API 中的一个函数&#xff0c;它用于在主机上分配特殊的内存&#xff0c;这种内存被称为 "pinned" 或 "page-locked" 内存。这种内存有以下特点和用途&#xff1a; GPU 地址空间映射…

SD6201 同步增压DC/DC调节器芯片IC

一般描述 SD6201是高效率同步、PWM升压型DC/DC转换器&#xff0c;专为中型功率系统提供高效率解决方案而优化。该器件在0.9 V至4.4V的输入电压下工作&#xff0c;开关频率为1.4 MHz。这些功能允许使用微小、低剖面的电感和陶瓷电容器&#xff0c;从而最大限度地减少了整…

LivePortrait模型构建指南

一、介绍 快手可灵大模型团队开源了名为 LivePortrait 的可控人像视频生成框架&#xff0c;能够准确、实时地将驱动视频的表情、姿态迁移到静态或动态人像视频上&#xff0c;生成极具表现力的视频结果。该项目的模型产生了定性肖像动画&#xff0c;只要输入一张静态的肖像图像…

多线程面试常问

一、创建线程的几种方式 1、继承Thread类并重写run()方法。 public class MyThread extends Thread {Overridepublic void run() {System.out.println("通过集成 Thread 类实现线程"); } } // 如何使用 new MyThread().start() 2、实现Runnable接口并重写run()方法…

deepin(深度)社区亮相2024 RISC-V中国峰会,全力推动RISC-V生态发展

8月21日—23日&#xff0c;全球三大RISC-V专业展会之一、国内最大的RISC-V年度盛会——2024 RISC-V中国峰会于浙江杭州盛大召开&#xff01;deepin&#xff08;深度&#xff09;社区携手合作伙伴出席峰会&#xff0c;与国内外业界专家、企业代表、研究机构及社区伙伴&#xff0…

python如何通过Json路径返回Json响应对应的值例子解析

在Python中&#xff0c;处理JSON数据通常使用标准库中的json模块来解析和操作JSON格式的数据。如果你想要通过JSON路径来获取JSON响应中的值&#xff0c;你可以使用第三方库&#xff0c;如jsonpath-ng&#xff0c;它允许你使用类似XPath的语法来查询JSON对象。 首先&#xff0…

mysql读写分离(mysql路由)

mysql路由 1. server4路由主机操作 rpm -ivh mysql-router-community-8.0.21-1.el7.x86_64.rpm # 安装路由工具 cd /etc/mysqlrouter/ vim mysqlrouter.conf # 配置文件# 均摊 [routing:ro] bind_address 0.0.0.0 bind_port 7001 destinations 192.168.228.11:3306,192.168…

LLM自对齐技术最新研究分享(一):对齐 Pipeline 数据合成(上)

欢迎关注 OpenMMLab 公众号获取一手技术干货 当我们向 ChatGPT 提问时&#xff0c;我们希望他能准确地回答我们的问题。当我们向他提出不合理的要求&#xff0c;比如询问如何制作炸弹或者如何考试作弊&#xff0c;我们希望他能拒绝回答并及时纠正我们的错误。AI 对齐&#xff0…

GAMES104:09高级动画技术:动画树、IK和表情动画-学习笔记

文章目录 一&#xff0c;动画混合1.1 数学混合&#xff1a;线性插值1.2 混合空间Blend Space1.2.1 1D Blend Space1.2.2 2D Blend Space1.2.3 Skeleton Masked Blending骨骼遮罩混合1.2.4 Addictive Blending 二&#xff0c;动画状态机Animation State Machine&#xff08;ASM&…

JMeter之插件jp@gc - Stepping Thread Group

文章目录 业务场景核心功能安装教程常规使用 业务场景 在性能测试中&#xff0c;希望jemter能动态设置线程数&#xff0c;并且线程数量能从低到高依次压测接口&#xff0c;比如线程数量从10增加到50&#xff0c;通过设定一定的并发线程数&#xff0c;给定加压规则&#xff0c;遵…

并发服务器

服务器&#xff0c;后台服务软件&#xff0c;后端开发&#xff0c;为软件客户端提供支持&#xff0c;数据支持&#xff0c;存储支持&#xff0c;数据中转 高并发要求&#xff0c;随着用户数量的增长&#xff0c;服务器的设计结构扩展&#xff0c;为更多用户提供服务器。 Web服…