【机器学习】P14 Tensorflow 使用指南 Dense Sequential Tensorflow 实现

news2024/11/20 7:15:20

Tensorflow 第一节:使用指南

  • Tensorflow 安装
  • 神经网络
    • 一些基本概念
    • 隐藏层和输出层:
    • 神经元的输出公式
  • Tensorflow 全连接层 Dense 与 顺序模型 Sequential
    • Dense Layer
    • Sequential Model
  • 代码实现一个神经网络
    • 实现方式一:手写神经网络
    • * 实现方式二:Tensorflow

Tensorflow 安装

有关 Tensorflow/CUDA/cuDNN 安装,见博客:https://xu-hongduo.blog.csdn.net/article/details/129927665

神经网络

在这里插入图片描述

一些基本概念

  • 上图中包含输入层、隐藏层、输出层;
  • 其中输入层为 layer 0,输入到网络中的内容为 x ⃗ \vec{x} x
  • 其中隐藏层有三层,layer 1layer 2layer 3
  • 其中输出层为 layer 4,输出内容为 a ⃗ [ 4 ] \vec{a}^{[4]} a [4]
  • 如果需要统计该神经网络有多少层,则统计为: 神经网络层数 = 隐藏层个数 + 输出层个数 = 3 + 1 = 4 神经网络层数 = 隐藏层个数 + 输出层个数 = 3 + 1 = 4 神经网络层数=隐藏层个数+输出层个数=3+1=4

隐藏层和输出层:

  • 关于隐藏层 layer 1
    • 隐藏层 layer 1 中包含四个神经元,其中每个神经元的输入为: x ⃗ \vec{x} x
    • 隐藏层 layer 1 的输出为 a ⃗ [ 1 ] \vec{a}^{[1]} a [1],一个包含四个元素的矩阵,分别为 layer 1 中四个神经元输出的结果;
  • 关于隐藏层 layer 2
    • 隐藏层 layer 2 中包含五个神经元,其中每个神经元的输入为: a ⃗ [ 1 ] \vec{a}^{[1]} a [1]
    • 隐藏层 layer 2 的输出为 a ⃗ [ 2 ] \vec{a}^{[2]} a [2],一个包含五个元素的矩阵,分别为 layer 2 中五个神经元输出的结果;
  • 关于隐藏层 layer 3
    • 隐藏层 layer 3 中包含三个神经元,其中每个神经元的输入为: a ⃗ [ 2 ] \vec{a}^{[2]} a [2]
    • 隐藏层 layer 3 的输出为 a ⃗ [ 3 ] \vec{a}^{[3]} a [3],一个包含三个元素的矩阵,分别为 layer 3 中三个神经元输出的结果;
  • 关于输出层 layer 4
    • 输出层 layer 4 中只有一个神经元,需要注意的是,输出层不限制神经元的个数,而是根据具体情况进行分析,从而规定神经元的数量。
    • 输出层的输入为:一个包含三个元素的矩阵 a ⃗ [ 3 ] \vec{a}^{[3]} a [3];输出为一个值 a [ 4 ] a^{[4]} a[4],当 a [ 4 ] ≥ 0.5 a^{[4]}≥0.5 a[4]0.5 时,表示结果为真,否则为假;

神经元的输出公式

根据下图,思考:

  1. 输入层矩阵 x ⃗ \vec{x} x 是一个 ? ∗ ? ?*? ?? 的矩阵?
  2. 隐藏层 layer 1 输出的 a ⃗ [ 1 ] \vec{a}^{[1]} a [1] 是一个 ? ∗ ? ?*? ?? 的矩阵?
  3. 隐藏层 layer 1 的向量参数 w ⃗ \vec{w} w 是一个 ? ∗ ? ?*? ?? 的矩阵?

在这里插入图片描述
列举隐藏层 layer 1 的输出公式:

layer 1 中包含四个神经元:

  • a 1 [ 1 ] = g ( w ⃗ 1 [ 1 ] ⋅ x ⃗ + b 1 [ 1 ] ) a_1^{[1]} = g(\vec{w}^{[1]}_1 · \vec{x} + b^{[1]}_1) a1[1]=g(w 1[1]x +b1[1])
  • a 2 [ 1 ] = g ( w ⃗ 2 [ 1 ] ⋅ x ⃗ + b 2 [ 1 ] ) a_2^{[1]} = g(\vec{w}^{[1]}_2 · \vec{x} + b^{[1]}_2) a2[1]=g(w 2[1]x +b2[1])
  • a 3 [ 1 ] = g ( w ⃗ 3 [ 1 ] ⋅ x ⃗ + b 3 [ 1 ] ) a_3^{[1]} = g(\vec{w}^{[1]}_3 · \vec{x} + b^{[1]}_3) a3[1]=g(w 3[1]x +b3[1])
  • a 4 [ 1 ] = g ( w ⃗ 4 [ 1 ] ⋅ x ⃗ + b 4 [ 1 ] ) a_4^{[1]} = g(\vec{w}^{[1]}_4 · \vec{x} + b^{[1]}_4) a4[1]=g(w 4[1]x +b4[1])

layer 1 的输出为一个二维数组:
a ⃗ [ 1 ] = [ [ a 1 [ 1 ] , a 2 [ 1 ] , a 3 [ 1 ] , a 4 [ 1 ] ] ] \vec{a}^{[1]} = [[a_1^{[1]}, a_2^{[1]}, a_3^{[1]}, a_4^{[1]}]] a [1]=[[a1[1],a2[1],a3[1],a4[1]]]

根据上述内容,回答上述的三个问题【1】【2】【3】:

  1. 输入层 x ⃗ \vec{x} x 是一个 n ∗ m n*m nm 的矩阵,其中 n n n 是训练样本的个数, m m m 是样本的特征。样本的 m m m 个特征,影响着隐藏层 layer 1 的向量参数矩阵形状。

  2. 隐藏层 layer 1 输出的 a ⃗ [ 1 ] \vec{a}^{[1]} a [1] 是一个 1 ∗ 4 1*4 14 的矩阵,内容为 layer 1 中四个神经元的结果;

  3. 隐藏层 layer 1 的向量参数 w ⃗ \vec{w} w 是一个 m ∗ 4 m*4 m4 的矩阵, m m m 代表输入的特征,根据这些输入的特征,我们输出 4 4 4 个值组成的 a ⃗ [ 1 ] \vec{a}^{[1]} a [1]


Tensorflow 全连接层 Dense 与 顺序模型 Sequential

下面内容我将围绕如何使用 tensorflow 代码实现上述的隐藏层以及诸多神经元:

Dense Layer

首先有请全连接层 Dense Layer 全连接层:

全连接层(Dense) 是深度神经网络中常用的一种层类型,也是最基本的层类型之一。全连接层将上一层(输入层或者前一层隐藏层)的每个神经元与本层的 每个神经元 都进行连接,形成一个完全连接的网络结构,因此也称为全连接层。

在全连接层中,每个神经元的输出值是上一层所有神经元的 加权和,然后再经过一个 非线性激活函数 进行处理。如果本层有 n n n 个神经元,上一层有 m m m 个神经元,那么全连接层的 权重矩阵 w ⃗ \vec{w} w )就是一个形状为 ( m , n ) (m, n) (m,n) 的矩阵,而偏置向量( b b b)的长度为 n n n


Sequential Model

Sequential model 是一种按顺序堆叠各种深度学习层的简单模型。在 Sequential model 中,每一层的输出都成为下一层的输入,这些层按照 顺序连接 在一起形成一个深度学习模型,故称为:顺序模型;


代码实现一个神经网络

在这里插入图片描述

实现方式一:手写神经网络

本节内容只是为了知识引入,完整的一个 Minst 判断手写 0/1 项目链接如下:
xxxxxx

def my_dense(a_in, W, b, g):

    units = W.shape[1]
    a_out = np.zeros(units)

    for i in range(units):
        w = W[:,i]
        z = np.dot(w, a_in) + b[i]
        a_out[i] = g(z)

    return(a_out)

简化上述代码,方案:通过 np.matmul()

在进行矩阵乘法计算时,np.matmul() 会自动识别输入的数组的维度,并根据矩阵乘法的规则进行计算。
e . g . e.g. e.g. 假设我们有两个矩阵 A A A B B B,它们的形状分别为 ( m , n ) (m, n) (m,n) ( n , p ) (n, p) (n,p),那么它们的乘积矩阵 C C C 的形状为 ( m , p ) (m, p) (m,p)

def my_dense_v(A_in, W, b, g):

    Z = np.matmul(A_in,W)+b
    A_out = g(Z)

    return(A_out)

* 实现方式二:Tensorflow

本节内容只是为了知识引入,完整的一个 Minst 判断手写 0/1 项目链接如下:
xxxxxx

model = Sequential(
    [               
        tf.keras.Input(shape=(400,)),
        Dense(units = 25, activation='sigmoid'),
        Dense(units = 15, activation='sigmoid'),
        Dense(units = 1, activation='sigmoid')        
    ], name = "my_model" 
)     

上述代码中,我们引入了三个全连接层:

  • Dense(units = 25, activation = 'sigmoid')
    • 该层(隐藏层)包含 25 个神经元,采用 sigmoid 作为激活函数;
    • 参数的总个数为:400 * 25 + 25 = 10025;
  • Dense(units = 15, activation = 'sigmoid')
    • 该层(隐藏层)包含 15 个神经元,采用 sigmoid 作为激活函数
    • 参数的总个数为:25 * 15 + 15 = 390;
  • Dense(units = 1, activation = 'sigmoid')
    • 该层(输出层)包含 1 个神经元,采用 sigmoid 作为激活函数
    • 参数的总个数为:15 * 1 + 1 = 16;

完整的一个 Minst 判断手写 0/1 项目链接如下:
xxxxxx

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

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

相关文章

JavaScript基础入门全解析(上)

JavaScript基础语法 什么是JavaScript(简称js) 1.首先了解前端页面的组成(前端页面的三层结构) ●HTML 表示了你的页面内有什么,组成页面的骨架 (结构层) ●CSS 表示了你的页面中每一个内容是…

Linux系统中安装新版本nacos(centos7)

1. 背景需求 由于一些限制,在客户现场的Linux操作系统中,没有安装docker k8s等容器,无法直接使用镜像安装,而且客户要求只能在原始的操作系统中安装最新版的nacos,(为什么需要安装最新版的nacos,因为检测国网检测到之前版本的nacos有漏洞,需要安装新版的nacos). 2. 下载nacos…

Windows10+Cmake+VS2019编译opencv

主要参考:Windows10CmakeVS2019编译opencv(超级详细)_vs编译opencv_乐安世家的博客-CSDN博客 OpenCV:Releases - OpenCV 想直接简单使用的话,不需要自己编译,下载编译好的就可以 假如需要用到opencv-contr…

【Python入门第四十九天】Python丨NumPy 数组拆分

拆分 NumPy 数组 拆分是连接的反向操作。 连接(Joining)是将多个数组合并为一个,拆分(Spliting)将一个数组拆分为多个。 我们使用 array_split() 分割数组,将要分割的数组和分割数传递给它。 实例 将数…

Docker教程:如何将Helix QAC创建为一个容器并运行?

在这个Docker教程中,你将了解到如何将Helix QAC创建为一个容器化的镜像并运行。 Docker的基本定义是一个开源且流行的操作系统级虚拟化(通常称为“容器化”)技术,它是轻量级且可移植的,主要在Linux和Windows上运行。D…

Linux主机 SSH 通过密钥登录

我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 root 账户登录。其实,有一个更…

换电脑 NoteExpress 数据备份迁移

前言 主要操作是跟着这篇博客做的:NoteExpress数据库备份和转移。但也有一些不一样的地方 旧电脑NoteExpress(NE)版本3.7,新电脑版本3.8 旧电脑 导出配置文件 桌面找到图标,打开位置,点击配置备份(绿色的图标&#…

水库安全运行智慧管理平台解决方案筑牢防汛“安全墙”

解决方案 水库安全运行智慧管理系统解决方案,系统主要由降雨量监测站、水库水位监测站、大坝安全监测中的渗流量、渗流压力和变形监测站及视频和图像监测站等站点组成,同时建立规范、统一的监测平台,集数据传输、信息共享、数据储存于一体&a…

图解HTTP阅读笔记:第4章 返回结果的HTTP状态码

《图解HTTP》第四章读书笔记 图解HTTP第4章:返回结果的HTTP状态码4.1 状态码告知从服务器端返回的请求结果4.2 2XX成功4.2.1 200 OK4.2.2 204 No Content4.2.3 206 Parital Content4.3 3XX重定向4.3.1 301 Moved Permanently4.3.2 302 Found4.3.3 303 See Other4.3.…

服务(第三篇)Apache配置与应用

httpd服务支持的虚拟主机类型包括以下三种: 1.基于域名:为每个虚拟主机使用不同的域名,但是其对应的 IP 地址是相同的。 2.基于IP地址:为每个虚拟主机使用不同的域名,且各自对应的IP地址也不相同。这种方式需要为服务器配备多个网…

Femto基站及其射频方案

关于部署3G femto基站 3GPP定义第三代移动通信的目的是要为客户提供全方位的移动多媒体体验。但很多条件下,这一目的并未实现,尤其是在边远地区或居民聚集区。 一个可行的解决方案是在家庭范围内部署无需宏node-B基站即可提供最大移动数据速率的家用基站…

26基于模型预测控制MPC的永磁同步电机MATLAB代码

资源地址: 基于模型预测控制(MPC)的永磁同步电机Matlab代码-电子商务文档类资源-CSDN文库 主要内容: 包含单电流环MPC仿真(仅电流环使用MPC策略,速度环使用PI调节器)、速度环和电流环MPC仿真…

C ++匿名函数:揭开C++ Lambda表达式的神秘面纱

潜意识编程:揭秘C Lambda表达式的神秘面纱 Subconscious Programming: Unveiling the Mystery of C Lambda Expressions 引言:Lambda表达式的魅力 (The Charm of C Lambda Expressions)Lambda表达式简介与基本概念 (Introduction and Basic Concepts of …

【Linux】浅析Input子系统

文章目录1. 框架1.1 数据结构1.2 evdev_handler1.3 evdev_init1.4 input_register_handler2. 应用如何打开节点并读取到事件数据2.1 evdev_fops2.2 evdev_open2.3 evdev_release2.4 evdev_read2.5 evdev_write2.6 evdev_poll2.7 evdev_fasync2.8 evdev_ioctl2.9 evdev_ioctl_co…

ADManager Plus:简化 Active Directory 管理的完美工具

在企业中,Active Directory(AD)是一个非常重要的组件,用于管理和控制所有计算机和用户的访问权限。然而,AD的管理和维护需要一定的技术能力和时间成本。为了简化这个过程,ManageEngine 推出了 ADManager Pl…

ASIC-WORLD Verilog(2)FPGA的设计流程

写在前面 在自己准备写一些简单的verilog教程之前,参考了许多资料----asic-world网站的这套verilog教程即是其一。这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加了自己的理解)分享给大家。 这是网站原文&…

如何在 DevOps 中进行 API 全生命周期管理?

随着 DevOps 理念在中国企业当中的普及和发展,中国企业 DevOps 落地成熟度不断提升,根据中国信通院的数据已有近 6 成企业向全生命周期管理迈进。 而在研发全生命周期管理之中,API 管理的地位愈发显得重要。随着 API 数量的大幅增长&#xf…

针对电商物流网络包裹应急调运与结构优化问题的解题【思路数据代码详解】

文章目录C 题 电商物流网络包裹应急调运与结构优化问题解题思路数据进行预处理将数据转换为 stationary 数据底部C 题 电商物流网络包裹应急调运与结构优化问题 (赛题出来以后第一时间在CSDN分享,文章底部) 最新进度在文章最下方卡片,加入获取思路数据代…

【Spring Cloud Alibaba】4.创建服务消费者

文章目录简介开始搭建创建项目修改POM文件添加启动类添加配置项添加Controller添加配置文件启动项目测试访问Nacos访问接口查看端点检查简介 接下来我们创建一个服务消费者,本操作先要完成之前的步骤,详情请参照【Spring Cloud Alibaba】Spring Cloud A…

深度学习代码,对coco数据集evaluate时,spice评估总是报错,解决如下:

在跑evaluate.py时,发现bleu,METEOR,ROUGE_L都能成功,就是spice评估总是报错,我的报错内容如下: 就找了好久,也问了chatgpt啥的,尝试很很多,最终发现是java版本太高了&am…