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

Python深度学习:从神经网络到循环神经网络

Python深度学习:从神经网络到循环神经网络

目录

  1. ✨ 神经网络基础
    1.1 🔍 前向传播与反向传播
  2. 🎨 卷积神经网络(CNN)
    2.1 🖼️ 图像分类任务的实现
    2.2 🚀 常用架构(LeNet、VGG、ResNet)
  3. 🔄 循环神经网络(RNN)
    3.1 ⏳ 时间序列预测与NLP应用

1. ✨ 神经网络基础

1.1 🔍 前向传播与反向传播

神经网络的核心结构模拟了大脑的神经元工作机制,每一个神经元接收输入、执行计算并输出结果,多个神经元连接成网络,从而具备了复杂的学习能力。前向传播和反向传播作为神经网络的核心机制,保证了模型的训练过程。

前向传播是指数据从输入层通过网络,逐层向前传递,最终在输出层得出结果。模型中的每一层神经元都执行相同的基本操作:将输入进行加权求和,并通过激活函数进行非线性变换。以下是前向传播的实现示例:

import numpy as np# 初始化权重和偏置
weights = np.array([0.2, 0.8, -0.5])
bias = 0.1# 激活函数 - 使用Sigmoid
def sigmoid(x):return 1 / (1 + np.exp(-x))# 前向传播
def forward_propagation(inputs):linear_output = np.dot(inputs, weights) + bias  # 线性计算activation_output = sigmoid(linear_output)  # 应用激活函数return activation_outputinputs = np.array([0.5, -0.2, 0.1])
output = forward_propagation(inputs)
print(f"前向传播输出: {output}")

在这个简单的例子中,输入数据通过一个三节点的网络,应用了Sigmoid激活函数。这种操作能够有效处理输入的非线性关系。

反向传播是神经网络训练的关键步骤,它通过链式法则计算误差相对于每个权重的梯度。这个过程允许我们通过优化算法(如梯度下降)来更新权重,使模型逐步逼近最优解。反向传播的核心是通过误差的传递,计算每一层的权重对最终误差的影响。

# 定义损失函数 (均方误差)
def mean_squared_error(y_true, y_pred):return np.mean((y_true - y_pred) ** 2)# 反向传播
def backward_propagation(inputs, y_true, output, learning_rate=0.01):# 计算预测值和真实值之间的误差error = y_true - output# 计算Sigmoid导数sigmoid_derivative = output * (1 - output)# 计算梯度gradients = error * sigmoid_derivative# 更新权重和偏置global weights, biasweights += learning_rate * np.dot(inputs.T, gradients)bias += learning_rate * np.sum(gradients)# 示例反向传播
y_true = np.array([1])
backward_propagation(inputs, y_true, output)

这个代码通过均方误差(MSE)计算损失,并通过梯度下降的方式更新权重。通过不断迭代这个过程,神经网络能够在训练集上逐步逼近最优解。

2. 🎨 卷积神经网络(CNN)

2.1 🖼️ 图像分类任务的实现

卷积神经网络(CNN)是一种专门用于处理图像数据的神经网络架构。CNN的核心思想是通过卷积操作提取图像的局部特征,并逐层学习图像中的抽象信息。CNN网络通常由卷积层、池化层和全连接层组成。

在图像分类任务中,CNN通过卷积层捕捉图像中的局部模式(如边缘、纹理等),通过池化层下采样以减少计算复杂度,并通过全连接层将提取的特征映射到分类结果。

以下是使用Keras实现一个简单的CNN用于图像分类的示例:

import tensorflow as tf
from tensorflow.keras import layers, models# 创建卷积神经网络模型
def create_cnn_model(input_shape, num_classes):model = models.Sequential()# 第一个卷积层和池化层model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=input_shape))model.add(layers.MaxPooling2D((2, 2)))# 第二个卷积层和池化层model.add(layers.Conv2D(64, (3, 3), activation='relu'))model.add(layers.MaxPooling2D((2, 2)))# 第三个卷积层和池化层model.add(layers.Conv2D(64, (3, 3), activation='relu'))model.add(layers.MaxPooling2D((2, 2)))# 全连接层model.add(layers.Flatten())model.add(layers.Dense(64, activation='relu'))model.add(layers.Dense(num_classes, activation='softmax'))return model# 模型输入参数
input_shape = (64, 64, 3)  # 输入为64x64的彩色图像
num_classes = 10  # 输出10个分类# 构建模型
cnn_model = create_cnn_model(input_shape, num_classes)
cnn_model.summary()

在这个代码中,首先构建了一个由三层卷积层组成的网络,每层卷积后接一个最大池化层,最后通过全连接层输出预测结果。这种结构在图像分类任务中表现良好,尤其适合大规模数据集的分类任务。

2.2 🚀 常用架构(LeNet、VGG、ResNet)

在卷积神经网络的发展过程中,出现了许多经典的架构,这些架构在解决复杂图像任务时取得了显著的成就。以下是几种常见的CNN架构:

LeNet是最早的卷积神经网络之一,广泛应用于手写数字识别任务。它由两层卷积层和两层全连接层组成,结构简单但有效。

def create_lenet(input_shape, num_classes):model = models.Sequential()model.add(layers.Conv2D(6, (5, 5), activation='tanh', input_shape=input_shape))model.add(layers.AveragePooling2D((2, 2)))model.add(layers.Conv2D(16, (5, 5), activation='tanh'))model.add(layers.AveragePooling2D((2, 2)))model.add(layers.Flatten())model.add(layers.Dense(120, activation='tanh'))model.add(layers.Dense(84, activation='tanh'))model.add(layers.Dense(num_classes, activation='softmax'))return model

VGG架构通过增加卷积层的深度来提升模型性能,VGG网络中的卷积层都是3x3卷积核,具有相同的结构,这种统一的设计使得网络易于扩展。

def create_vgg(input_shape, num_classes):model = models.Sequential()model.add(layers.Conv2D(64, (3, 3), activation='relu', padding='same', input_shape=input_shape))model.add(layers.Conv2D(64, (3, 3), activation='relu', padding='same'))model.add(layers.MaxPooling2D((2, 2)))# 重复卷积和池化操作# ...model.add(layers.Flatten())model.add(layers.Dense(4096, activation='relu'))model.add(layers.Dense(num_classes, activation='softmax'))return model

ResNet引入了残差连接(skip connection)以解决深度网络中的梯度消失问题,极大地提升了网络的学习能力。

from tensorflow.keras.applications import ResNet50# 使用预训练ResNet50模型
resnet_model = ResNet50(weights='imagenet', include_top=False, input_shape=input_shape)
resnet_model.summary()

每个架构都根据任务需求提供了不同的性能,研究者可以根据实际应用选择合适的模型。

3. 🔄 循环神经网络(RNN)

3.1 ⏳ 时间序列预测与NLP应用

循环神经网络(RNN)专门用于处理序列数据,在自然语言处理(NLP)和时间序列预测中表现优异。RNN的核心特点在于它能够保留前一时刻的信息,并将其传递到当前时刻,使得

网络具备了“记忆”能力。这种特性使RNN非常适合处理时间序列、文本等具有时序关系的数据。

RNN的主要变种包括LSTM(长短期记忆网络)和GRU(门控循环单元),它们通过特殊的结构来解决RNN中的长程依赖和梯度消失问题。

时间序列预测是RNN的重要应用之一。例如,使用RNN预测股票价格或天气变化等时间序列数据时,网络能够利用历史数据的模式进行预测。

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense# 创建LSTM模型
def create_lstm_model(input_shape):model = Sequential()model.add(LSTM(50, return_sequences=True, input_shape=input_shape))model.add(LSTM(50))model.add(Dense(1))  # 输出预测值return model# 模型输入参数
input_shape = (10, 1)  # 输入为10个时间步的单变量数据
lstm_model = create_lstm_model(input_shape)
lstm_model.summary()

这个简单的LSTM网络可以用于时间序列预测,LSTM层通过记忆单元存储长时间的依赖关系,提升了模型对时序信息的理解。

在自然语言处理(NLP)中,RNN的应用十分广泛,特别是在文本生成、情感分析和机器翻译任务中,RNN能够通过学习上下文信息来捕捉文本中的深层含义。

以下是一个基于RNN的文本分类任务示例:

from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.layers import Embedding, SimpleRNN# 模拟数据
texts = ["我喜欢深度学习", "机器学习很有趣", "神经网络是强大的工具"]
labels = [1, 0, 1]# 文本预处理
tokenizer = Tokenizer(num_words=1000)
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
padded_sequences = pad_sequences(sequences, maxlen=5)# 创建RNN模型
def create_rnn_model(input_length):model = Sequential()model.add(Embedding(input_dim=1000, output_dim=64, input_length=input_length))model.add(SimpleRNN(64))model.add(Dense(1, activation='sigmoid'))return modelinput_length = 5  # 文本序列长度
rnn_model = create_rnn_model(input_length)
rnn_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
rnn_model.summary()

这个例子展示了如何使用RNN进行文本分类。RNN通过逐步处理文本中的单词序列,捕捉上下文之间的关系,并最终输出分类结果。

RNN及其变种在时间序列和文本数据的处理上展现了卓越的能力,通过调整网络结构,可以实现不同复杂度的任务需求。

相关文章:

Python深度学习:从神经网络到循环神经网络

Python深度学习:从神经网络到循环神经网络 目录 ✨ 神经网络基础 1.1 🔍 前向传播与反向传播🎨 卷积神经网络(CNN) 2.1 🖼️ 图像分类任务的实现 2.2 🚀 常用架构(LeNet、VGG、Res…...

C++输⼊输出

1.<iostream> 是 Input Output Stream 的缩写&#xff0c;是标准的输⼊、输出流库&#xff0c;定义了标准的输⼊、输 出对象 2.std::cin 是 istream 类的对象&#xff0c;它主要⾯向窄字符&#xff08;narrow characters (of type char)&#xff09;的标准输 ⼊流。 3…...

卡码网KamaCoder 117. 软件构建

题目来源&#xff1a;117. 软件构建 C题解&#xff08;来源代码随想录&#xff09;&#xff1a;拓扑排序&#xff1a;给出一个 有向图&#xff0c;把这个有向图转成线性的排序。拓扑排序也是图论中判断有向无环图的常用方法。 拓扑排序的过程&#xff0c;其实就两步&#xff1…...

Acwing 线性DP

状态转移方程呈现出一种线性的递推形式的DP&#xff0c;我们将其称为线性DP。 Acwing 898.数字三角形 实现思路&#xff1a; 对这个三角形的数字进行编号&#xff0c;状态表示依然可以用二维表示&#xff0c;即f(i,j),i表示横坐标&#xff08;横线&#xff09;&#xff0c;j表…...

Docker面试-24年

1、Docker 是什么&#xff1f; Docker一个开源的应用容器引擎&#xff0c;是实现容器技术的一种工具&#xff0c;让开发者可以打包他们的应用以及环境到一个镜像中&#xff0c;可以快速的发布到任何流行的操作系统上。 2、Docker的三大核心是什么? 镜像&#xff1a;Docker的…...

ubuntu 安装k8s

#关闭 Swap 内存&#xff0c;配置完成建议重启一下 nano /etc/fstab #注释下面相似的一行 #/swapfile none swap sw 0 0 #重启 reboot#部属k8s apt update && apt install -y apt-transport-https 下载 gpg 密钥 curl https://mi…...

No.4 笔记 | 探索网络安全:揭开Web世界的隐秘防线

在这个数字时代&#xff0c;网络安全无处不在。了解Web安全的基本知识&#xff0c;不仅能保护我们自己&#xff0c;也能帮助我们在技术上更进一步。让我们一起深入探索Web安全的世界&#xff0c;掌握那些必备的安全知识&#xff01; 1. 客户端与WEB应用安全 前端漏洞&#xff1…...

spring揭秘24-springmvc02-5个重要组件

文章目录 【README】【1】HanderMapping-处理器映射容器【1.1】HanderMapping实现类【1.1.1】SimpleUrlHandlerMapping 【2】Controller&#xff08;二级控制器&#xff09;【2.1】AbstractController抽象控制器&#xff08;控制器基类&#xff09; 【3】ModelAndView(模型与视…...

关键字:register

1.铺垫 1.1 计算集中具有存储能力的硬件&#xff1a;cpu中的寄存器、cache&#xff0c;内存&#xff0c;硬盘等 1.2离cpu越近的存储硬件&#xff0c;效率越高&#xff0c;单价成本越贵&#xff1b;离cpu越远的存储硬件&#xff0c;效率越低&#xff0c;单价成本越便宜&#x…...

力扣 简单 110.平衡二叉树

文章目录 题目介绍解法 题目介绍 解法 平衡二叉树:任意节点的左子树和右子树的高度之差的绝对值不超过 1 //利用递归方法自顶向下判断以每个节点为根节点的左右子树的最大深度是否大于1 class Solution {public boolean isBalanced(TreeNode root) {if(root null){return tr…...

基于深度学习的代码优化

基于深度学习的代码优化是一种使用深度学习技术来提升编程代码性能、减少运行时间或资源消耗的方式。通过模型学习大量代码的特征和结构&#xff0c;深度学习可以帮助自动化地识别和应用优化策略。以下是一些关键应用领域&#xff1a; 编译器优化&#xff1a;深度学习模型可以用…...

汽车电气系统中KL30、KL15、KL50、KLR、KL31、KL87、KL75的作用

目录 1、KL30 (Battery Positive Terminal) 2、KL15 (Ignition Switch, Positive) 3、KL50 (Starter Motor Terminal) 4、KLR (Ignition-Off Draw) 5、KL31 (Ground) 6、KL87 (Relay Output) 7、KL75 (Accessory) 在汽车电气系统中&#xff0c;KL系列的术语起源于德国&a…...

随笔(四)——代码优化

文章目录 前言1.原本代码2.新增逻辑3.优化逻辑 前言 原逻辑&#xff1a;后端data数据中返回数组&#xff0c;数组中有两个对象&#xff0c;一个是属性指标&#xff0c;一个是应用指标&#xff0c;根据这两个指标展示不同的多选框 1.原本代码 getIndicatorRange(indexReportLi…...

安装管理K8S的开源项目KubeClipper介绍

安装管理K8S的开源项目KubeClipper介绍 1. 概述 KubeClipper是九州云开源的一个图形化界面 Kubernetes 多集群管理工具&#xff0c;旨在提供易使用、易运维、极轻量、生产级的 Kubernetes 多集群全生命周期管理服务。让运维工程师从繁复的配置和晦涩的命令行中解放出来&#…...

北交大研究突破:塑料光纤赋能低成本无摄像头AR/VR眼动追踪技术

北交大研究&#xff1a;探索无摄像头低成本AR/VR眼动追踪新路径 在AR/VR技术领域&#xff0c;眼动追踪作为一项关键技术&#xff0c;对于提升用户体验、优化渲染效率具有重要意义。然而&#xff0c;传统的眼动追踪方案多依赖于高成本的摄像头&#xff0c;这不仅增加了设备的制造…...

算法题总结(七)——哈希表

当我们遇到了要快速判断一个元素是否出现集合里的时候&#xff0c;就要考虑哈希法 242、有效地字母异位词 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t…...

PS批量执行动作,ps批量修改图片大小,并修改文件的类型

PS批量执行动作&#xff0c;ps批量修改图片大小&#xff0c;并修改文件的类型 修改格式&#xff0c;文件类型为&#xff1a;jpg&#xff0c;psd&#xff0c;tiff&#xff0c;并修改大小 打开文件&#xff08;也可以不打开&#xff0c;&#xff09; 点击文件>脚本>文件…...

CentOS 替换 yum源 经验分享

视频教程在bilibili:CentOS 替换 yum源 经验分享_哔哩哔哩_bilibili问题原因 解决方法 1. 进入镜像目录 [rootlocalhost ~]# cd /etc/yum.repos.d/ 2.备份文件 [rootlocalhost yum.repos.d]# rename repo bak * 3.寻找阿里镜像源复制 https://developer.aliyun.com/mirror/ …...

Elasticsearch基础_2.数据类型

文章目录 一、基本的数据类型1.1、keyword1.2、text1.3、数值类型1.4、布尔类型1.5、时间类型 二、复杂的数据类型三、字段映射 一、基本的数据类型 1.1、keyword keyword类型是不进行切分的字符串类型。这里的“不进行切分”指的是&#xff1a;在索引时&#xff0c;对keyword…...

docker快速安装ELK

一、创建elk目录 创建/elk/elasticsearch/data/目录 mkdir -p /usr/local/share/elk/elasticsearch/data/ 创建/elk/logstash/pipeline/目录 mkdir -p /usr/local/share/elk/logstash/pipeline/ 创建/elk/kibana/conf/目录 mkdir -p /usr/local/share/elk/kibana/conf/ 二、创建…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...