当前位置: 首页 > news >正文

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

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.5a^{[4]}≥0.5a[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 中包含四个神经元:

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

layer 1 的输出为一个二维数组:
a⃗[1]=[[a1[1],a2[1],a3[1],a4[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∗mn*mnm 的矩阵,其中 nnn 是训练样本的个数,mmm 是样本的特征。样本的 mmm 个特征,影响着隐藏层 layer 1 的向量参数矩阵形状。

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

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


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

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

Dense Layer

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

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

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


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. 假设我们有两个矩阵 AAABBB,它们的形状分别为 (m,n)(m, n)(m,n)(n,p)(n, p)(n,p),那么它们的乘积矩阵 CCC 的形状为 (m,p)(m, p)(m,p)

def my_dense_v(A_in, W, b, g):Z = np.matmul(A_in,W)+bA_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.lryc.cn/news/45295.html

相关文章:

  • ubuntu18.04安装nvidia驱动,3种方式图文详解+卸载教程
  • 多线程进阶学习11------CountDownLatch、CyclicBarrier、Semaphore详解
  • 华为OD机试用java实现 -【RSA 加密算法】
  • 技术宅小伙:大龄程序员就业,未来我们将何去何从?
  • Spring Boot+Vue实现Socket通知推送
  • python---python介绍
  • 第十四届蓝桥杯大赛——真题训练第10天
  • 3.29~3.30学习总结
  • 结构体详解 ——— C语言
  • Java SE 基础(4) Java的语言特点
  • 都炸店了,拼多多还在坚持什么
  • vue尚品汇商城项目-day01【6.Footer组件的显示与隐藏】
  • 命令行上的数据科学第二版 一、简介
  • utf-8转换到utf-16的转换过程你懂吗?
  • C++编程大师之路:从入门到精通--持续更新中~
  • 面试阿里软件测试岗,收到offer后我却毫不犹豫拒绝了....
  • 【c语言多线程编程】关于pthread_create()和pthread_join()的多线程详解
  • 抖音seo矩阵系统源码搭建技术+二开开源代码定制部署
  • 【周赛刷题】平衡树+图中最短环
  • C++笔记——第十篇 继承 的解析,详细易懂哦
  • SQL Server中的全文搜索
  • 自适应平移混音方法
  • 炼钢厂VR职业技能实训软件,提高员工学习效率和掌握技能速度
  • MySQL数据库范式
  • 通过多层方法重塑网络安全
  • Golang学习+深入(四)-运算符
  • C++ 运算符重载:C++ 运算符重载的高级技巧和最佳实践
  • 软件测试找了2个月了,找不到工作怎么办?
  • 满足高并发的TB API接口接入说明
  • Themis Pro版将正式推出,3次迭代到底在酝酿什么?