【深度学习_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.rhkb.cn/news/81783.html

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

相关文章

剑指Offer12.矩阵中的路径 C++

1、题目描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平…

分享一个计算器

先看效果&#xff1a; 再看代码&#xff08;查看更多&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>计算器</title><style>* {box-sizing: border-box;}body…

k8s学习day03

第五章 Pod详解 本章节将详细介绍Pod资源的各种配置&#xff08;yaml&#xff09;和原理。 Pod介绍 Pod结构 每个Pod中都可以包含一个或者多个容器&#xff0c;这些容器可以分为两类&#xff1a; 用户程序所在的容器&#xff0c;数量可多可少 Pause容器&#xff0c;这是每个…

ChatGPT 作为 Python 编程助手

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 简单的数据处理脚本 我认为一个好的起点是某种数据处理脚本。由于我打算让 ChatGPT 之后使用各种 Python 库编写一些机器学习脚本&#xff0c;这似乎是一个合理的起点。 目标 首先&#xff0c;我想尝试…

常用开源的弱口令检查审计工具

常用开源的弱口令检查审计工具 1、SNETCracker 1.1、超级弱口令检查工具 SNETCracker超级弱口令检查工具是一款开源的Windows平台的弱口令安全审计工具&#xff0c;支持批量多线程检查&#xff0c;可快速发现弱密码、弱口令账号&#xff0c;密码支持和用户名结合进行检查&am…

第九次作业

1. SSL工作过程是什么&#xff1f; 当客户端向一个 https 网站发起请求时&#xff0c;服务器会将 SSL 证书发送给客户端进行校验&#xff0c;SSL 证书中包含一个公钥。校验成功后&#xff0c;客户端会生成一个随机串&#xff0c;并使用受访网站的 SSL 证书公钥进行加密&#xf…

Effective Java笔记(28)列表优于数组

数组与泛型相比&#xff0c;有两个重要的不同点 。 首先&#xff0c;数组是协变的&#xff08; covariant &#xff09; 。 这个词听起来有点吓人&#xff0c;其实只是表示如果 Sub 为 Super 的子类型&#xff0c;那么数组类型 Sub[ ]就是Super[ ]的子类型。 相反&#xff0c;泛…

linux 安装go 1.18版本

首先去官网找到对应的版本 直接下载下来&#xff08;如果服务器可以直接访问到go 官网也可以wget直接下载到服务器&#xff09; 然后把该包上传到linux 的/usr/local 目录下 然后直接解压安装该包&#xff1a; sudo tar -C /usr/local -zxvf go1.18.10.linux-amd64.tar.gz 然…

Vscode-工具使用

Vscode &#xff0c;这玩意儿是开源的&#xff0c;以前用收费的破解版&#xff0c;过段时间就高版本不匹配&#xff0c;这次搞个不要钱的玩玩&#xff0c;记录使用心得 下载 下载地址&#xff1a;官网 点击下载&#xff0c;但是这里有个问题下载比较慢&#xff0c;解决办法&a…

Dockerfile部署golang,docker-compose

使用go镜像打包&#xff0c;运行在容器内 redis和mysql用外部的 项目目录结构 w1go项目&#xff1a; Dockerfile # 这种方式是docker项目加上 本地的mysql和redis环境 # go打包的容器 FROM golang:alpine AS builder# 为我们镜像设置一些必要的环境变量 ENV GO111MODULEon …

Vue3 第五节 一些组合式API和其他改变

1.provide和inject 2.响应式数据判断 3.Composition API的优势 4.新的组件 5.其他改变 一.provide和inject 作用&#xff1a;实现祖与后代组件间通信 套路&#xff1a;父组件有一个provide选项来提供数据&#xff0c;后代组件有一个inject选项来开始使用这些数据 &…

uniapp 微信小程序 上下滚动的公告通知(只取前3条)

效果图&#xff1a; <template><view class"notice" click"policyInformation"><view class"notice-icon"><image mode"aspectFit" class"img" src"/static/img/megaphone.png"></i…

具有吸引子的非线性系统(MatlabSimulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

BIO,NIO,AIO总结

文章目录 1. BIO (Blocking I/O)1.1 传统 BIO1.2 伪异步 IO1.3 代码示例 1.4 总结2. NIO (New I/O)2.1 NIO 简介2.2 NIO的特性/NIO与IO区别1)Non-blocking IO&#xff08;非阻塞IO&#xff09;2)Buffer(缓冲区)3)Channel (通道)4)Selector (选择器) 2.3 NIO 读数据和写数据方式…

刚刚更新win11,记事本消失怎么处理?你需要注意些什么?

记录window11的bug hello&#xff0c;我是小索奇 昨天索奇从window10更新到了window11&#xff0c;由于版本不兼容卸载了虚拟机&#xff0c;这是第一个令脑壳大的&#xff0c;算了&#xff0c;还是更新吧&#xff0c;了解了解win11的生态&#xff0c;后期重新装虚拟机 第一个可…

TCP三次握手四次断开

一、了解TCP &#x1f345;TCP &#xff1a;传输控制协议&#xff0c;是一种面向连接的可靠的传输协议。 什么是可靠的传输协议&#xff1f;如何保障可靠传输&#xff1f; 保证可靠性&#xff1a; 1.确认机制 2.重传输机制什么是面向连接&#xff1f;如何保障面…

教雅川学缠论07-中枢实战众泰汽车000980

本文实战众泰汽车 下面是2023年11月14-2023年8月8众泰汽车日K图 先画日K 接下来处理包含&#xff0c;就变成下面这个样子 下面在套上缠论的理论&#xff0c;未来股价的走势应该是红色椭圆形虚线里面的样子 好了&#xff0c;文章就到这里&#xff0c;如果众泰最终不是这个走势…

人工智能与物理学(软体机器人能量角度)的结合思考

前言 好久没有更新我的CSDN博客了&#xff0c;细细数下来已经有了16个月。在本科时期我主要研究嵌入式&#xff0c;研究生阶段对人工智能感兴趣&#xff0c;看了一些这方面的论文和视频&#xff0c;因此用博客记录了一下&#xff0c;后来因为要搞自己的研究方向&#xff0c;就…

Maven入职学习

一、什么是Maven&#xff1f; 概念&#xff1a; Maven是一种框架。它可以用作依赖管理工具、构建工具。 它可以管理jar包的规模、jar包的来源、jar包之间的依赖关系。 它的用途就是管理规模庞大的jar包&#xff0c;脱离IDE环境执行构建操作。 具体使用&#xff1a; 工作机…

【MATLAB第67期】# 源码分享 | 基于MATLAB的morris全局敏感性分析

【MATLAB第67期】# 源码分享 | 基于MATLAB的morris全局敏感性分析 一、代码展示 clear all npoint100;%在分位数超空间中要采样的点数(计算次数iternpoint*(nfac1) nfac20;%研究函数的不确定因素数量 [mu, order] morris_sa1((x)test_function(x), nfac, npoint)for t1:size…