【深度学习_TensorFlow】感知机、全连接层、神经网络

写在前面

感知机、全连接层、神经网络是什么意思?


感知机: 是最简单的神经网络结构,可以对线性可分的数据进行分类。

全连接层: 是神经网络中的一种层结构,每个神经元与上一层的所有神经元相连接,实现全连接。

神经网络: 是由大量神经元组成的网络结构,通过层与层之间的连接,实现对数据的表示和转换。神经网络通常由输入层、隐藏层和输出层等全连接层构成。

三者有什么关系?


  • 感知机是最简单的单层神经网络,仅有输入层和输出层。

  • 全连接层是构建多层神经网络时常用的一种层类型。

  • 神经网络通常由多层的全连接层叠加构成,从而实现比单层感知机更强大的功能。

所以可以说,感知机是简单的神经网络,全连接层是构建复杂神经网络的基础模块,神经网络通过组合多层全连接层实现复杂的功能。感知机和全连接层都是神经网络的组成要素。


写在中间

一、感知机

感知机(Perceptron)是一种简单的人工神经网络,由Frank Rosenblatt于1957年提出。它是一种线性二分类模型,主要用于解决二元分类问题。感知机的基本结构包括输入层、输出层和一个线性分类器。输入层接收输入数据,输出层提供分类结果,线性分类器将输入数据映射到输出层。

感知机模型的结构如下,它接受长度为𝑛的一维向量𝒙 = [𝑥1, 𝑥2, … , 𝑥𝑛],每个输入节点通过权值为[w1, w2, … , w𝑛]的连接汇集为变量 𝑧

z = w 1 x 1 + w 2 x 2 + ⋯ + w n x n + b z=w_{1}x_{1}+w_{2}x_{2}+\cdots+w_{n}x_{n}+b z=w1x1+w2x2++wnxn+b

写为向量的形式为:

z = w T x + b z=w^{\mathrm{T}}x+b z=wTx+b

其中𝑏称为感知机的偏置(Bias),一维向量𝒘 = [𝑤1, 𝑤2, … , 𝑤𝑛]称为感知机的权值(Weight),𝑧 称为感知机的净活性值(Net Activation)。

感知机是线性模型,并不能处理线性不可分问题。通过在线性模型后添加激活函数后得到活性值(Activation) :

a = σ ( z ) = σ ( w T x + b ) a=\sigma(z)=\sigma(w^{\mathrm{T}}x+b) a=σ(z)=σ(wTx+b)

其中激活函数可以是阶跃函数,也可以是符号函数:

a = { 1 w T x + b ≥ 0 0 w T x + b < 0 a=\left\{\begin{matrix}1&w^\mathrm{T}x+b\geq0\\0&w^\mathrm{T}x+b<0\end{matrix}\right. a={10wTx+b0wTx+b<0

a = { 1 w T x + b ≥ 0 − 1 w T x + b < 0 a=\left\{\begin{matrix}1&\text{w}^\mathrm{T}x+b\geq0\\-1&\text{w}^\mathrm{T}x+b<0\end{matrix}\right. a={11wTx+b0wTx+b<0

在这里插入图片描述

二、全连接层

( 1 )了解概念

全连接层(Fully Connected Layer)是神经网络中的一种层结构,主要用于将前一层的输出与后一层的输入进行连接。全连接层中的每个神经元都与前一层的所有神经元相连,因此得名。它在感知机的基础上,将不连续的阶跃激活函数换成了其它平滑连续可导的激活函数,并通过堆叠多个网络层来增强网络的表达能力

我们通过替换感知机的激活函数,同时并行堆叠多个神经元来实现多输入、多输出的网络层结构。举一个最常用的例子:

构成 3 输入节点、2 个输出节点的网络层。其中第一个输出节点的输出为:

o 1 = σ ( w 11 ⋅ x 1 + w 21 ⋅ x 2 + w 31 ⋅ x 3 + b 1 ) o_1=\sigma(w_{11}\cdot x_1+w_{21}\cdot x_2+w_{31}\cdot x_3+b_1) o1=σ(w11x1+w21x2+w31x3+b1)

第二个输出节点的输出为:

o 2 = σ ( w 12 ⋅ x 1 + w 22 ⋅ x 2 + w 32 ⋅ x 3 + b 2 ) o_{2}=\sigma(w_{12}\cdot x_{1}+w_{22}\cdot x_{2}+w_{32}\cdot x_{3}+b_{2}) o2=σ(w12x1+w22x2+w32x3+b2)

输出向量为𝒐 = [𝑜1, 𝑜2],通过矩阵可以表达为如下的形式:

[ o 1 o 2 ] = [ x 1 x 2 x 3 ] @ [ w 11 w 12 w 21 w 22 w 31 w 32 ] + [ b 1 b 2 ] \begin{bmatrix}o_1&o_2\end{bmatrix}=\begin{bmatrix}x_1&x_2&x_3\end{bmatrix}@\begin{bmatrix}w_{11}&w_{12}\\w_{21}&w_{22}\\w_{31}&w_{32}\end{bmatrix}+\begin{bmatrix}b_1&b_2\end{bmatrix} [o1o2]=[x1x2x3]@ w11w21w31w12w22w32 +[b1b2]

可以归纳为

O = X @ W + b \boldsymbol{O}=X@W+\boldsymbol{b} O=X@W+b

输入矩阵𝑿的 shape 定义为 [ b , d i n ] [b, d_{in}] [b,din],𝑏为样本数量,此处只有 1 个样本参与前向运算, d i n d_{in} din为输入节点数;权值矩阵 W 的 shape 定义为 [ d i n , d o u t ] [d_{in}, d_{out}] [din,dout] d o u t d_{out} dout为输出节点数,偏置向量 b 的 shape 定义为 [ d o u t ] [d_{out}] [dout]

2 )学会实现

全连接层本质上是矩阵的相乘和相加运算,实现并不复杂。TensorFlow 中有使用方便的层实现方式:layers.Dense(units, activation)。通过 layer.Dense 类,只需要指定输出节点数 units 和激活函数类型 activation 即可。

fc = layers.Dense(units=512, activation=tf.nn.relu)

上述通过一行代码即可以创建一层全连接层 fc,并指定输出节点数为 512,并创建内部权值张量𝑾和偏置张量𝒃。我们可以通过类内部的成员名 fc.kernelfc.bias来获取权值张量𝑾和偏置张量𝒃对象

三、神经网络

通过层层堆叠上面的全连接层,保证前一层的输出节点数与当前层的输入节点数匹配,,即可堆叠出任意层数的网络。我们把这种由神经元相互连接而成的网络叫做神经网络。

如图其中第 1~3 个全连接层在网络中间,称之为隐藏层 1、2、3,最后一个全连接层的输出作为网络的输出,称为输出层。隐藏层 1、2、3 的输出节点数分别为[256,128,64],输出层的输出节点数为 10。

在这里插入图片描述

下面我们就用张量的方式来实现上面的神经网络

# 隐藏层 1 张量 
w1 = tf.Variable(tf.random.truncated_normal([784, 256], stddev=0.1)) 
b1 = tf.Variable(tf.zeros([256])) 
# 隐藏层 2 张量 
w2 = tf.Variable(tf.random.truncated_normal([256, 128], stddev=0.1)) 
b2 = tf.Variable(tf.zeros([128])) 
# 隐藏层 3 张量 
w3 = tf.Variable(tf.random.truncated_normal([128, 64], stddev=0.1)) 
b3 = tf.Variable(tf.zeros([64])) 
# 输出层张量 
w4 = tf.Variable(tf.random.truncated_normal([64, 10], stddev=0.1)) 
b4 = tf.Variable(tf.zeros([10])) 

但是随着网络层数的增加,这样手动创建一个神经网络就显得过于繁琐,我们有更为简单的层实现方式,对于这种数据依次向前传播的网络,也可以通过 Sequential 容器封装成一个网络大类对象,调用大类的前向计算函数一次即可完成所有层的前向计算,使用起来更加方便:

#  导入 Sequential 容器 
from keras import layers,Sequential #  通过 Sequential 容器封装为一个网络类 
model = Sequential([ layers.Dense(256, activation=tf.nn.relu) , # 创建隐藏层 1 layers.Dense(128, activation=tf.nn.relu) , # 创建隐藏层 2  layers.Dense(64, activation=tf.nn.relu) , # 创建隐藏层 3  layers.Dense(10, activation=None) , # 创建输出层  
])  out = model(x) #  前向计算得到输出  

至此,网络构建的大体流程就讲解完毕了


写在最后

👍🏻点赞,你的认可是我创作的动力!
⭐收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式之策略模式(Strategy)

一、概述 定义一系列的算法&#xff0c;把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的类而变化。 二、适用性 1.许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。 2.需要使用一个算法的不同变体。…

《MySQL》第十三篇 SELECT * 和 SELECT 字段名的区别

在实际开发中&#xff0c;进行数据查询的SQL无非有两种写法&#xff0c;使用SELECT * from tableName或者SELECT 字段名(多个) from tableName&#xff0c;二者各有利弊 SELECT * 写法 优点&#xff1a; 写法简单&#xff0c;不需要手动输入具体的字段&#xff0c;一定程度上…

并查集练习—省份数量

上一篇中讲了并查集及其原理&#xff0c;在这篇文章中简单应用一下。如果对并查集不是很了解强烈建议先看上一篇。 题目&#xff1a; 有 n 个城市&#xff0c;其中一些彼此相连&#xff0c;另一些没有相连。如果城市 a 与城市 b 直接相连&#xff0c;且城市 b 与城市 c 直接相…

Python 开发工具 Pycharm —— 使用技巧Lv.2

pydoc是python自带的一个文档生成工具&#xff0c;使用pydoc可以很方便的查看类和方法结构 本文主要介绍&#xff1a;1.查看文档的方法、2.html文档说明、3.注释方法、 一、查看文档的方法 **方法1&#xff1a;**启动本地服务&#xff0c;在web上查看文档 命令【python3 -m…

云上 Index:看「简墨」如何为云原生打造全新索引

拓数派首款数据计算引擎 PieCloudDB Database 是一款全新的云原生虚拟数仓。为了提升用户使用体验&#xff0c;提高查询效率&#xff0c;在实现存算分离的同时&#xff0c;PieCloudDB 设计与打造了全新的存储引擎「简墨」等模块&#xff0c;并针对云场景和分析型场景设计了高效…

基于Yolov2深度学习网络的车辆检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. 卷积神经网络&#xff08;CNN&#xff09; 4.2. YOLOv2 网络 4.3. 实现过程 4.4. 应用领域 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心…

图论-简明导读

计算机图论是计算机科学中的一个重要分支&#xff0c;它主要研究图的性质和结构&#xff0c;以及如何在计算机上有效地存储、处理和操作这些图。本文将总结计算机图论的核心知识点。 一、基本概念 计算机图论中的基本概念包括图、节点、边等。图是由节点和边构成的数据结构&am…

新版chrome浏览器恢复下载的时候恢复底栏提示

近日&#xff0c;谷歌对其Chrome浏览器进行了更新&#xff0c;为所有桌面系统的Chrome浏览器增加了位于地址栏右侧的“下载”气泡&#xff0c;并同时取消了原有的底部下载栏。 谷歌表示&#xff0c;这次更新的目的是为了让用户更方便地与最近下载的文件进行交互。 然而&#x…

Kubernetes v1.20 二进制部署

架构 k8s集群master01&#xff1a;192.168.80.101 kube-apiserver kube-controller-manager kube-scheduler etcd k8s集群master02&#xff1a;192.168.80.102 k8s集群node01&#xff1a;192.168.80.103 kubelet kube-proxy docker k8s集群node02&#xff1a;192.168.80…

windows永久暂停更新

目录 1.winr,输入regedit打开注册表 2.打开注册表的这个路径: 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 右键空白地方新建QWORD值命名为:FlightSettingsMaxPauseDays 3.双击FlightSettingsMaxPauseDays,修改里面的值为100000,右边基数设置…

Python求均值、方差、标准偏差SD、相对标准偏差RSD

均值 均值是统计学中最常用的统计量&#xff0c;用来表明资料中各观测值相对集中较多的中心位置。用于反映现象总体的一般水平&#xff0c;或分布的集中趋势。 import numpy as npa [2, 4, 6, 8]print(np.mean(a)) # 均值 print(np.average(a, weights[1, 2, 1, 1])) # 带…

小白也能懂!业务中台与数据中台究竟是什么?

大家好&#xff0c;今天我们要讨论的是业务中台与数据中台&#xff0c;或许你对这些名词还不太熟悉&#xff0c;但别担心&#xff0c;接下来我将为你详细解释这两个概念&#xff0c;并且用通俗易懂的语言来解释它们。 业务中台是什么&#xff1f; 首先&#xff0c;让我们来了解…