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_output

inputs = 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, bias
    weights += 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 model

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EtherNet/IP 转 EtherNet/IP, EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关https://item.taobao.com/item.htm?ftt&id822721028899 协议转换通信网关 EtherNet/IP 转 EtherNet/IP GW系列型号 MS-GW22 概述 简介 MS-GW22 是 EtherNet/IP 和 EtherNet/IP 协议转换网关,…

vue快速上手

文章目录 vue快速上手vue简述框架介绍mvvm vue使用1.npm2.vue cli1.打开 vue 官网2.快速上手3.切换目录到我们创建的应用位置,安装依赖3.运行vue项目 vue快速上手 vue简述 框架介绍 mvvm vue使用 1.npm 包管理器 安装nodejs就好了 2.vue cli 1.打开 vue 官网…

WebRTC Connection Negotiate解决

最近有个项目 ,部署之后一直显示,查了一些资料还是没有解决,无奈只有自己研究解决? 什么是内网穿透? 我们访问我们自己的官网产品页面,我们的服务器是一个单独的个体,有独立的公网ip&#xf…

【C/C++】错题记录(四)

题目一 一个函数可以有很多个返回值(有很多个return语句),但是最终只能有一个return语句执行。 题目二 题目三 题目四 题目五 程序数据结构算法 题目六 题目七 题目八 题目九 D选项是语句……

移动硬盘无法读取?原因、恢复方案与预防措施全解析

一、移动硬盘无法读取的现象与影响 移动硬盘作为我们日常存储和传输数据的重要工具,其便捷性和大容量深受用户喜爱。然而,当移动硬盘突然无法被电脑识别或读取时,往往会让人感到十分焦虑。这种无法读取的情况可能表现为:插入移动…

LabVIEW 成绩统计系统

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

大模型笔记05--coze经典案例分析

大模型笔记05--coze经典案例分析 介绍经典案例分析抖音视频转小红书文案艺术照 & 卡通照片助手艺术照图像流卡通照片图像流多功能图像助手 注意事项说明 介绍 扣子是新一代 AI 应用开发平台,具备完善的生态系统,是国内最出色的AI平台之一。用好coze…

雷池+frp 批量设置proxy_protocol实现真实IP透传

需求 内网部署safeline,通过frp让外网访问内部web网站服务,让safeline记录真实外网攻击IP safeline 跟 frp都部署在同一台服务器:192.168.2.103 frp client 配置 frpc只需要在https上添加transport.proxyProtocolVersion "v2"即…

aws(学习笔记第三课) AWS CloudFormation

aws(学习笔记第三课) 使用AWS CloudFormation 学习内容: AWS CloudFormation的模板解析使用AWS CloudFormation启动ec2 server 1. AWS CloudFormation 的模版解析 CloudFormation模板结构 CloudFormation是AWS的配置管理工具,属于Infrastructure as Co…

VUE 开发——Node.js学习(一)

一、认识Node.js Node.js是一个跨平台JavaScript运行环境,使开发者可以搭建服务器端的JavaScript应用程序 使用Node.js编写服务器端程序——编写数据接口、前端工程化; Node.js环境没有BOM和DOM; Node.js安装:下载node-v16.19…

【Canvas与标牌】盾形银底红带Best Quality Premium标牌

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>BestQulityPremium金属牌重制版Draft2</title><style type&…

在忘记密码的情况下重新访问手机?5种忘记密码解锁Android手机的方法

无需密码即可访问Android手机。 即使你忘记了密码&#xff0c;你也可以解锁你的Android手机&#xff0c;但你通常需要将手机恢复出厂设置。 您可以通过执行出厂恢复或使用“查找我的设备”网站解锁大多数Android手机。 如果你不再有密码&#xff0c;这里有五种解锁安卓手机的…

​​​​​​​如何使用Immersity AI将图片转换成3D效果视频

随着技术的进步&#xff0c;图片处理变得越来越强大和直观。借助Immersity AI这样的工具&#xff0c;我们现在可以轻松地将平面图片转换成3D效果视频。以下是如何使用Immersity AI进行这一转换的详细步骤。 第一步&#xff1a;访问Immersity AI网站 首先&#xff0c;打开你的…

贪心算法c++

贪心算法C概述 一、贪心算法的基本概念 贪心算法&#xff08;Greedy Algorithm&#xff09;&#xff0c;又名贪婪法&#xff0c;是一种解决优化问题的常用算法。其基本思想是在问题的每个决策阶段&#xff0c;都选择当前看起来最优的选择&#xff0c;即贪心地做出局部最优的决…

Spring Boot医院管理系统:提升患者体验

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

基于PHP猫咖私人影院系统【附源码】

效果如下&#xff1a; 系统首页界面 用户注册界面 包厢信息界面 零食信息界面 管理员登录界面 包厢预订界面 猫咪信息界面 研究背景 近年来&#xff0c;随着生活品质的提升和个性化消费需求的增长&#xff0c;猫咖和私人影院等新兴休闲娱乐方式逐渐受到年轻人的青睐。猫咖结合…

电玩体验馆计时软件可以倒计时的软件试用版下载 佳易王ps5计时器管理系统使用教程

一、前言 【软件试用版下载可以点击本文章最下方官网卡片】 电玩体验馆计时软件可以倒计时的软件试用版下载 佳易王ps5计时器管理系统使用教程 1、软件能够记录玩家开始的时间和节数时间&#xff0c;从而计算出时长。 2、根据预设的收费标准&#xff0c;软件可以自动计算出…

如何解决在 nextjs 中使用 sequelize 连接 mysql 报错:Please install mysql2 package manually

解决方案 手动设置 dialectModule 的值为 mysql2。增加 dialectModule 配置即可。 import mysql2 from mysql2 import { Sequelize } from sequelizeconst { DB_DATABASE, DB_USER, DB_PASSWORD, DB_HOST, DB_PORT, DB_LOGGING, DB_POLL_MAX, DB_POLL_MIN, DB_POLL_ACQUIRE, …

厨房用品分割系统源码&数据集分享

厨房用品分割系统源码&#xff06;数据集分享 [yolov8-seg-C2f-DCNV3&#xff06;yolov8-seg-AFPN-P345等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global Al ln…

学习threejs,添加户外光照光源

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言二、&#x1f340;绘制任意字体模型…