【机器学习之深度学习】神经元、层的基本概念,神经网络以及神经元与线性回归和逻辑回归的相似之处

引言

神经元、层和神经网络深度学习模型的核心组成部分,它们共同工作,使得深度学习能够处理复杂的数据和任务。通过叠加多个层,可以构建出能够学习复杂函数的深度神经网络

一、神经元和层

深度学习中的神经元和层是构建复杂预测模型的基础组件。以下是关于它们的一些基本概念:

1.1 神经元(Neuron)

1.1.1 定义

神经元是深度学习模型的基本单元,它模拟人脑中的神经元。在数学上,神经元接收输入,通过权重和偏置进行转换,并应用一个激活函数来产生输出

1.1.2 功能

每个神经元执行以下操作:

  1. 加权求和:计算输入向量的加权和(输入值乘以对应的权重,然后求和)
  2. 添加偏置:将一个偏置项加到加权求和的结果上
  3. 激活函数:应用一个非线性函数(激活函数)到上述结果上,以产生神经元的输出
  • 激活函数:常用的激活函数包括SigmoidReLU(Rectified Linear Unit)、Tanh等。激活函数引入了非线性因素,使得神经网络能够学习和模拟复杂函数

1.2 层(Layer)

1.2.1 定义

层是由多个神经元组成的集合,它在神经网络中执行特定的变换

1.2.2 类型

  1. 输入层(Input Layer):接收外部数据输入的层
  2. 隐藏层(Hidden Layer):位于输入层和输出层之间的层,可以进行特征学习和表示转换
  3. 输出层(Output Layer):产生最终预测或分类结果的层
  • 全连接层(Dense Layer):层中的每个神经元都与前一层的所有神经元相连

1.3 神经元和层的关系

  • 深度学习中,神经元通过层组织起来,形成神经网络(Neural Network)
  • 每一层都是前一层的输出和后一层的输入,层与层之间通过权重(weights)和偏置(biases)连接
  • 神经网络通过前向传播(Forward Propagation)来计算输出,通过反向传播(Back Propagation)来更新权重和偏置,从而学习数据中的模式

1.4 应用

  • 深度学习模型中,通过叠加多个层,可以构建出能够学习复杂函数的深度神经网络(Deep Neural Networks, DNN)
  • 这种结构在图像识别、语音识别、自然语言处理等领域表现出色,能够处理大量的数据并提取出有用的特征

1.5 总结

神经元和层是深度学习模型的核心组成部分,它们共同工作,使得深度学习能够处理复杂的数据和任务

二、探索神经元/单元和层的内部工作原理

在这个实验中,我们将探索神经元/单元和层的内部工作原理。并且与已经学到的回归/线性模型和逻辑模型进行对比。实验将介绍Tensorflow,并展示这些模型如何在那个框架中实现

在这里插入图片描述

2.1 包

2.1.1 Tensorflow和Keras

Tensorflow是由谷歌开发的一个机器学习包。2019年,谷歌将Keras集成到Tensorflow中,并发布了Tensorflow 2.0Keras是由François Chollet独立开发的框架,它为Tensorflow提供了一个简单、以层为中心的接口

python">import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.layers import Dense, Input
from tensorflow.keras import Sequential
from tensorflow.keras.losses import MeanSquaredError, BinaryCrossentropy
from tensorflow.keras.activations import sigmoid
from lab_utils_common import dlc
from lab_neurons_utils import plt_prob_1d, sigmoidnp, plt_linear, plt_logistic
plt.style.use('./deeplearning.mplstyle')
import logging
logging.getLogger("tensorflow").setLevel(logging.ERROR)
tf.autograph.set_verbosity(0)

2.2 无激活函数的神经元 - 回归/线性模型

2.2.1 数据集

我们将使用课程1中的一个例子,对房价进行线性回归

python">X_train = np.array([[1.0], [2.0]], dtype=np.float32)           #(以1000平方英尺为单位的大小)
Y_train = np.array([[300.0], [500.0]], dtype=np.float32)       #(以1000美元为单位的房价)
fig, ax = plt.subplots(1,1)
ax.scatter(X_train, Y_train, marker='x', c='r', label="Data Points")
ax.legend( fontsize='xx-large')
ax.set_ylabel('Price (in 1000s of dollars)', fontsize='xx-large')
ax.set_xlabel('Size (1000 sqft)', fontsize='xx-large')
plt.show()

输出结果:
在这里插入图片描述

2.2.3 回归/线性模型

由无激活函数的神经元实现的函数与课程1中的线性回归相同:
f w , b ( x ( i ) ) = w ⋅ x ( i ) + b ( 1 ) f_{w,b}(x(i)) = w \cdot x(i) + b \quad (1) fw,b(x(i))=wx(i)+b(1)
我们可以定义一个只有一个神经元或单元的层,并与熟悉的线性回归函数进行比较

python">linear_layer = tf.keras.layers.Dense(units=1, activation = 'linear', )
# 查看权重
linear_layer.get_weights()

输出结果:
在这里插入图片描述

还没有权重,因为权重还没有实例化。让我们尝试一下模型在X_train中的一个例子上。这将触发权重的实例化。注意,层的输入必须是2-D的,所以我们将其重塑。

python">a1 = linear_layer(X_train[0].reshape(1,1))
print(a1)

输出结果:
在这里插入图片描述

结果是形状为(1,1)的张量(数组的另一种名称),即一个条目
现在让我们看看权重和偏置。这些权重是随机初始化为小数,偏置默认初始化为零

python">w, b= linear_layer.get_weights()
print(f"w = {w}, b={b}")

输出结果:
在这里插入图片描述

具有单个输入特征的线性回归模型(1)将有一个权重和一个偏置。这与我们上面的linear_layer相匹配
权重是随机初始化的,所以让我们将它们设置为一个已知的值

python">set_w = np.array([[200]])
set_b = np.array([100])
# set_weights接受一个numpy数组列表
linear_layer.set_weights([set_w, set_b])
print(linear_layer.get_weights())

输出结果:
在这里插入图片描述

让我们比较方程(1)和层输出

python">a1 = linear_layer(X_train[0].reshape(1,1))
print(a1)
alin = np.dot(set_w,X_train[0].reshape(1,1)) + set_b
print(alin)

输出结果:
在这里插入图片描述

它们产生相同的值,我们可以使用我们的线性层来预测我们的训练数据

python">prediction_tf = linear_layer(X_train)
prediction_np = np.dot( X_train, set_w) + set_b
plt_linear(X_train, Y_train, prediction_tf, prediction_np)

输出结果:
在这里插入图片描述

2.3 带Sigmoid激活函数的神经元

由带Sigmoid激活函数的神经元/单元实现的函数与课程1中的逻辑回归相同:
f w , b ( x ( i ) ) = g ( w x ( i ) + b ) ( 2 ) f_{w,b}(x(i)) = g(w x(i) + b) \quad (2) fw,b(x(i))=g(wx(i)+b)(2)
其中
g ( x ) = sigmoid ( x ) g(x) = \text{sigmoid}(x) g(x)=sigmoid(x)
让我们将 w w w b b b设置为一个已知的值,并检查模型

2.3.1 数据集

我们将使用课程1中的一个例子,进行逻辑回归

python">X_train = np.array([0., 1, 2, 3, 4, 5], dtype=np.float32).reshape(-1,1)  # 2-D矩阵
Y_train = np.array([0,  0, 0, 1, 1, 1], dtype=np.float32).reshape(-1,1)  # 2-D矩阵
pos = Y_train == 1
neg = Y_train == 0
X_train[pos]

输出结果:
在这里插入图片描述

python">pos = Y_train == 1
neg = Y_train == 0
fig,ax = plt.subplots(1,1,figsize=(4,3))
ax.scatter(X_train[pos], Y_train[pos], marker='x', s=80, c = 'red', label="y=1")
ax.scatter(X_train[neg], Y_train[neg], marker='o', s=100, label="y=0", facecolors='none', edgecolors=dlc["dlblue"],lw=3)
ax.set_ylim(-0.08,1.1)
ax.set_ylabel('y', fontsize=12)
ax.set_xlabel('x', fontsize=12)
ax.set_title('单变量图')
ax.legend(fontsize=12)
plt.show()

输出结果:
在这里插入图片描述

2.3.2 逻辑神经元

我们可以通过添加Sigmoid激活函数来实现一个’逻辑神经元’。然后,神经元的函数由上面的(2)式描述。
这一部分将创建一个包含我们的逻辑层的Tensorflow模型,以展示创建模型的一种替代方法。Tensorflow通常用于创建多层模型。Sequential模型是构建这些模型的一个方便方式。

python">model = Sequential([tf.keras.layers.Dense(1, input_dim=1,  activation = 'sigmoid', name='L1')]
)
python">model.summary()

输出结果:
在这里插入图片描述

model.summary()显示了模型的层和参数数量。这个模型中只有一个层,而且这个层只有一个单元。这个单元有两个参数,𝑤和𝑏

python">logistic_layer = model.get_layer('L1')
w,b = logistic_layer.get_weights()
print(w,b)
print(w.shape,b.shape)

输出结果:
在这里插入图片描述
让我们将权重和偏置设置为一个已知的值

python">set_w = np.array([[2]])
set_b = np.array([-4.5])
# set_weights接受一个numpy数组列表
logistic_layer.set_weights([set_w, set_b])
print(logistic_layer.get_weights())

输出结果:
在这里插入图片描述
让我们比较方程(2)和层输出。

python">a1 = model.predict(X_train[0].reshape(1,1))
print(a1)
alog = sigmoidnp(np.dot(set_w,X_train[0].reshape(1,1)) + set_b)
print(alog)

输出结果:
在这里插入图片描述

它们产生相同的值,可以使用我们的逻辑层和NumPy模型来预测我们的训练数据

python">plt_logistic(X_train, Y_train, model, set_w, set_b, pos, neg)

输出结果:
在这里插入图片描述

上面的阴影反映了Sigmoid的输出,其值在0到1之间变化

2.4 总结


http://www.ppmy.cn/news/1508674.html

相关文章

多模态大语言模型(MMLLM)的现状、发展和潜力

1、大模型 随着ChatGPT流行,大模型技术正逐渐成为AI领域的热点。许多行业大佬纷纷投身于这一赛道,展示了大模型的独特魅力和广阔前景。 王慧文,前美团联合创始人,发起“AI英雄帖”。 李志飞,出门问问创始人&#xff0…

Linux LD_PRELOAD优先加载so失效原因分析

网上由很多介绍LD_PRELOAD劫持的文章,我就不做过多介绍,之前有碰到失效的,网上找了很久没找到原因,后面分析出原因,现在写出来给后人避坑。 Linux系统使用LD_PRELOAD环境变量可以让程序优先加载指定的so文件&#xff0…

Nginx系列-Nginx Location匹配规则

文章目录 Nginx系列-Nginx Location匹配规则1. 语法基础2. 匹配规则2.1 精确匹配()2.2. 最长前缀匹配(^~)2.3. 正则表达式匹配(~和~*)2.4. 普通前缀匹配(无修饰符)2.5. 默认匹配&…

【数据结构-前缀哈希】力扣3026. 最大好子数组和

给你一个长度为 n 的数组 nums 和一个 正 整数 k 。 如果 nums 的一个 子数组 中,第一个元素和最后一个元素 差的绝对值恰好 为 k ,我们称这个子数组为 好 的。换句话说,如果子数组 nums[i…j] 满足 |nums[i] - nums[j]| k ,那么…

易基因:儿童和成人实体瘤共有微小差异甲基化区域(mDMR)的全面分析 | 表观研究

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 癌症是美国1~14岁儿童第二大常见死因,每年约有11000例新发病例和1200例死亡病例。与成人癌症相比,儿童肿瘤通常突变负荷较低。然而儿童肿瘤的表观基因组发生显著变…

LVS的简单配置及对Mysql主从复制的补充

Day 22 LVS的配置 环境准备 DSN() 用来解析各主机的域名和ip地址,配置域名解析huajuan,负责管理其他主机 web1--->web1.tangpin.huajuan web2--->web2.tangpin.huajuan dns--->dns.tangpin.huajuan web1(192.168.2.200) 用nginx…

‘Task‘ object is not callable ERROR

pycharm 调试异步的代码报错 TypeError: ‘Task‘ object is not callable ERROR: Exception in callback <Task 解决方法:点击菜单栏帮助-查找操作-注册表,在注册表中搜索python.debug.asyncio.repl禁用即可

<Qt> 系统 - 事件

目录 前言: 一、事件介绍 二、事件的处理 (一)鼠标事件 1. 进入和离开事件 2. 鼠标点击事件 3. 释放事件 4. 双击事件 5. 移动事件 6. 滚轮事件 (二)键盘按键事件 1. 单个按键 2. 组合按键 (…

交叉编译util-linux

参考文章:https://www.cnblogs.com/wanglouxiaozi/p/17836701.html 1、下载源码 https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.39/2、编译 解压压缩包: sudo tar xvf util-linux-2.39.2.tar.gz执行autogen.sh生成configure ./aut…

书生.浦江大模型实战训练营——(四)书生·浦语大模型全链路开源开放体系

最近在学习书生.浦江大模型实战训练营,所有课程都免费,以关卡的形式学习,也比较有意思,提供免费的算力实战,真的很不错(无广)!欢迎大家一起学习,打开LLM探索大门&#xf…

NPM版本管理高级技巧:实现版本范围预览锁定

引言 在现代软件开发中,依赖管理是确保项目稳定性和可预测性的关键。NPM(Node Package Manager)作为Node.js生态系统的包管理器,提供了一套灵活的版本控制机制,允许开发者精确控制依赖包的版本。版本范围预览锁定是一…

求1000以内的水仙花数【C语言】

求1000以内的水仙花数 #include <stdio.h> //包含标准输入输出头文件&#xff0c;用于使用printf函数int main() { //程序的主函数开始int a, b, c, i; //i用于循环遍历100到999之间的所有数&#xff08;三位数&#xff09;&#xff0c;a, b, c分别用于存储当前数i的百位…

汽车电子中间件的关键技术

汽车电子中间件的关键技术 中间件架构设计分层架构与模块化设计优势劣势 服务导向架构&#xff08;SOA&#xff09;主要特点&#xff1a;SOA在汽车电子中的应用&#xff1a;优势&#xff1a;劣势&#xff1a; 通讯协议与数据传输传统协议&#xff08;CAN、LIN&#xff09;CAN&a…

Github 2024-08-09 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-08-09统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6TypeScript项目4Jupyter Notebook项目1Cuda项目1Sentry:开发者优先的错误跟踪和性能监控平台 创建周期:5093 天开发语言:Python,…

python 实现Aho-Corasick(AC)算法

Aho-Corasick&#xff08;AC算法&#xff09;算法介绍 Aho-Corasick&#xff08;AC&#xff09;算法是一种高效的字符串多模匹配算法&#xff0c;由Alfred V. Aho和Margaret J. Corasick在1975年提出。该算法通过构建一个有限状态自动机&#xff08;AC自动机&#xff09;来实现…

Python | Leetcode Python题解之第326题3的幂

题目&#xff1a; 题解&#xff1a; class Solution:def isPowerOfThree(self, n: int) -> bool:return n > 0 and 1162261467 % n 0

死信队列.

“死信”是指在RabbitMQ中那些因为某些原因无法被正常处理的消息。

Raw格式化后文件能恢复吗 电脑磁盘格式化后如何恢复数据 硬盘格式变成了raw怎么恢复

硬盘、U盘等移动存储设备在存储数据文件上是非常方便的&#xff0c;不过在使用过程中也会因为操作、或者本身设备问题&#xff0c;导致存储设备出现各种各样的问题。较为常见的问题就是存储设备格式化、存储设备格式变为Raw格式等。今天要给大家分享的是有关Raw格式化的相关内容…

数据结构--第八天

--哈希表 -哈希表的概念 哈希表&#xff1a;用散列法存储的线性表被称为哈希表&#xff0c;使用的函数被称为散列函数或者哈希函数&#xff0c;f(k)被称为散列地址或者哈希地址。。通常情况下&#xff0c;散列表的储存空间是一个一维数组&#xff0c;而哈希地址为数组的下标 -哈…

【高效赋能】微信社群机器人RPA自动化运营体系,开启社群管理新纪元!

在数字化营销的浪潮中&#xff0c;社群经济已成为企业品牌建设和用户互动的重要阵地。然而&#xff0c;随着社群数量的增多和规模的扩大&#xff0c;传统的社群管理方式已显得力不从心。为此&#xff0c;我们推出了一站式微信社群机器人RPA自动化运营体系&#xff0c;为企业提供…