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

【深度学习】发展过程和实际应用场景——图像分类 ?自然语音处理?语音识别?自动驾驶?医疗影像诊断?附代码

【深度学习】发展过程和实际应用场景——图像分类 ?自然语音处理?语音识别?自动驾驶?医疗影像诊断?附代码

【深度学习】发展过程和实际应用场景——图像分类 ?自然语音处理?语音识别?自动驾驶?医疗影像诊断?附代码


文章目录

  • 【深度学习】发展过程和实际应用场景——图像分类 ?自然语音处理?语音识别?自动驾驶?医疗影像诊断?附代码
  • 前言
  • 1.深度学习的历史与发展
    • 1.1 早期发展
    • 1.2 神经网络的停滞与复兴
    • 1.3 深度学习的蓬勃发展
  • 2.深度学习的核心原理
  • 3.常见的深度学习框架
  • 4.深度学习的应用场景
    • 4.1图像分类
    • 4.2自然语言处理(NLP)
    • 4.3语音识别
    • 4.4自动驾驶
    • 4.5医疗影像诊断
  • 总结


前言

深度学习(Deep Learning)是机器学习的一个子领域,它依赖于人工神经网络,特别是具有多层结构的深度神经网络(DNN)。它在图像处理、语音识别、自然语言处理、推荐系统等方面得到了广泛的应用。下面我们将深入探讨深度学习的发展历史、技术原理、框架以及具体的应用场景。

1.深度学习的历史与发展

1.1 早期发展

  • 20世纪40年代:神经网络的思想可以追溯到20世纪40年代,麦卡洛克(Warren McCulloch)和皮茨(Walter Pitts)提出了神经元模型这个模型简单地模拟了人类大脑中神经元的基本运作
  • 1958年:Frank Rosenblatt提出了感知器(Perceptron),这是最早的人工神经网络之一,能够实现简单的二分类任务

1.2 神经网络的停滞与复兴

  • 1970-1980年代:尽管感知器在简单问题上取得了一些成功,但由于感知器无法解决非线性问题(如异或问题),神经网络的研究陷入低谷
  • 1986年:Hinton等人提出了反向传播(Backpropagation)算法,使得多层神经网络(即“深度网络”)的训练成为可能。这是深度学习的一个关键突破。
  • 2006年:Hinton提出了深度信念网络(DBN),这是深度学习的正式崛起,标志着研究的复兴。

1.3 深度学习的蓬勃发展

  • 2010年以后:得益于数据量的激增和计算资源(特别是GPU)的提升,深度学习模型能够处理更复杂的任务。尤其在图像分类(如ImageNet比赛)和语音识别等领域,深度学习的表现远超传统的机器学习方法。

2.深度学习的核心原理

深度学习的核心是模拟生物神经元网络的人工神经网络。简单来说,神经网络由多个“层”组成,每一层由许多“节点”(或“神经元”)构成。每个节点接收输入并通过激活函数生成输出,传递给下一个节点。常见的激活函数包括ReLU、Sigmoid和Tanh等

  • 1.前向传播(Forward Propagation):输入数据通过层层神经元传递,生成输出结果。
  • 2.损失函数(Loss Function):用于衡量模型预测结果与实际结果的差距。常见的损失函数有均方误差(MSE)和交叉熵损失(Cross-Entropy Loss)。
  • 3.反向传播(Backpropagation):通过链式法则,计算损失对每个权重的梯度,从而更新网络的权重以最小化损失。
  • 4.优化算法(Optimization Algorithm):用于更新网络参数。常见的优化算法包括梯度下降(Gradient Descent)、Adam、RMSprop等。

3.常见的深度学习框架

  • 1.TensorFlow:由Google推出,支持灵活的计算图和分布式训练。
  • 2.PyTorch:由Facebook开发,易于使用,具有动态计算图,非常适合研究和快速原型开发。
  • 3.Keras:一个高级API,能够在TensorFlow或Theano之上构建和训练神经网络,简化了模型构建流程。
  • 4.MXNet:由亚马逊推出,专注于分布式训练和跨设备的高效计算。
  • 5.Caffe:由伯克利视觉和学习中心开发,擅长图像分类等任务。

4.深度学习的应用场景

4.1图像分类

场景:图像分类是深度学习最经典的应用之一,目标是为输入的图像分配一个类标签

  • 实现:使用卷积神经网络(CNN)处理图像,自动提取图像特征

代码示例:

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms# 定义简单的CNN
class SimpleCNN(nn.Module):def __init__(self):super(SimpleCNN, self).__init__()self.conv1 = nn.Conv2d(1, 32, kernel_size=3)self.conv2 = nn.Conv2d(32, 64, kernel_size=3)self.fc1 = nn.Linear(64*12*12, 128)self.fc2 = nn.Linear(128, 10)def forward(self, x):x = torch.relu(self.conv1(x))x = torch.relu(self.conv2(x))x = x.view(-1, 64*12*12)  # 展开为一维x = torch.relu(self.fc1(x))x = self.fc2(x)return torch.log_softmax(x, dim=1)# 数据处理
transform = transforms.Compose([transforms.ToTensor()])
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)# 定义模型、损失函数和优化器
model = SimpleCNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 训练模型
for epoch in range(1, 11):for batch_idx, (data, target) in enumerate(train_loader):optimizer.zero_grad()output = model(data)loss = criterion(output, target)loss.backward()optimizer.step()if batch_idx % 100 == 0:print(f'Epoch {epoch}, Batch {batch_idx}, Loss: {loss.item()}')

代码解释:

  • 1.SimpleCNN 定义了一个简单的卷积神经网络,包含两个卷积层和两个全连接层。
  • 2.forward 函数描述了前向传播的过程,通过ReLU激活函数进行非线性变换。
  • 3.使用 MNIST 数据集,定义了数据加载器和模型。
  • 4.使用交叉熵损失函数计算预测和真实标签的差距,并通过Adam优化器更新权重。

4.2自然语言处理(NLP)

场景:文本分类,例如情感分析。

  • 实现:可以使用循环神经网络(RNN)或基于Transformer的模型(如BERT)处理文本

代码示例:

import torch
from transformers import BertTokenizer, BertForSequenceClassification# 加载预训练的BERT模型和分词器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForSequenceClassification.from_pretrained('bert-base-uncased')# 示例句子
sentences = ["I love this product!", "This is a bad experience."]# 将句子编码成BERT输入格式
inputs = tokenizer(sentences, padding=True, truncation=True, return_tensors="pt")# 模型推理
outputs = model(**inputs)# 输出分类结果
logits = outputs.logits
print(logits)

代码解释:

  • 加载BERT模型和对应的分词器,能够将文本转化为模型所需的格式。
  • inputs 是BERT所需的张量形式输入,logits 是模型的输出,表示分类结果。

4.3语音识别

场景:将语音信号转化为文本。语音识别的目标是将语音信号转化为文字,这通常使用深度神经网络(如RNN、CNN 或 Transformer)来处理音频序列。

  • 实现:以预训练的Wav2Vec 2.0模型为例,这是基于Transformer的自动语音识别(ASR)模型

代码示例:

import torch
from transformers import Wav2Vec2Processor, Wav2Vec2ForCTC
import torchaudio# 加载预训练的Wav2Vec 2.0模型和处理器
processor = Wav2Vec2Processor.from_pretrained("facebook/wav2vec2-base-960h")
model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")# 加载音频文件并进行预处理
waveform, sample_rate = torchaudio.load("path_to_audio_file.wav")
input_values = processor(waveform, sampling_rate=sample_rate, return_tensors="pt").input_values# 使用模型进行推理
with torch.no_grad():logits = model(input_values).logits# 解码预测结果
predicted_ids = torch.argmax(logits, dim=-1)
transcription = processor.batch_decode(predicted_ids)print("识别结果: ", transcription)

代码解释:

1.加载模型和处理器:

  • Wav2Vec2Processor 用于将音频转换为模型所需的输入形式。
  • Wav2Vec2ForCTC 是基于Wav2Vec2的语音识别模型。

2.加载和预处理音频:

  • 使用 torchaudio.load 函数加载音频文件,并将其采样率与模型要求的采样率保持一致。
  • processor 将音频转换为模型可以接受的张量格式。

3.推理过程:

  • 通过 model(input_values) 进行前向传播,得到预测的 logits(模型输出的概率分布)。

4.解码输出:

  • 使用 torch.argmax 获得每个时间步的预测ID,然后通过 processor.batch_decode 将ID转为文本,即最终的识别结果。

4.4自动驾驶

场景:通过摄像头和传感器的输入,识别周围的环境,并对车辆进行控制。自动驾驶通常涉及多种传感器数据的处理,如摄像头捕捉的图像数据。深度学习在自动驾驶中的核心应用包括物体检测和路径规划。

  • 实现:使用卷积神经网络进行图像处理,结合强化学习进行策略优化。下面以YOLOv5为例,展示如何实现基于摄像头的物体检测。

代码示例:

import torch
from PIL import Image
from torchvision import transforms# 加载预训练的YOLOv5模型
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')# 加载并预处理图像
img = Image.open('path_to_image.jpg')
transform = transforms.Compose([transforms.ToTensor()])
img_tensor = transform(img).unsqueeze(0)# 推理检测
results = model(img_tensor)# 显示结果
results.show()

代码解释:

1. 加载YOLOv5模型:

  • 使用 torch.hub.load 从YOLOv5库加载预训练模型,yolov5s 是轻量级模型。

2.图像预处理:

  • Image.open 用于加载图像文件,transforms.ToTensor() 将图像转换为PyTorch的张量格式,并且 unsqueeze(0) 将其扩展为批量维度。

3.推理:

  • model(img_tensor) 使用模型进行前向传播,返回检测结果。

4.结果显示:

  • results.show() 直接展示检测出的物体及其边界框。

在自动驾驶中,这种物体检测可以用于识别道路上的行人、车辆、交通标志等,帮助系统实时做出决策。

4.5医疗影像诊断

场景:通过X光、CT等医疗影像,自动检测病变区域。医疗影像诊断中,深度学习常用于病灶的检测与分割,典型的模型是UNet。

  • 实现:卷积神经网络和基于UNet的分割模型。以下是UNet模型用于医学图像分割的核心代码。

代码示例:

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import transforms
from torch.utils.data import DataLoader, Dataset
from PIL import Image# 定义UNet模型
class UNet(nn.Module):def __init__(self):super(UNet, self).__init__()# 定义编码器部分self.enc1 = nn.Sequential(nn.Conv2d(1, 64, 3, padding=1), nn.ReLU(), nn.Conv2d(64, 64, 3, padding=1), nn.ReLU())self.pool = nn.MaxPool2d(2)# 解码器部分self.dec1 = nn.Sequential(nn.Conv2d(64, 64, 3, padding=1), nn.ReLU(), nn.Conv2d(64, 1, 3, padding=1), nn.Sigmoid())def forward(self, x):enc1 = self.enc1(x)    # 编码器部分x = self.pool(enc1)    # 下采样x = self.dec1(x)       # 解码器部分return x# 加载数据(假设已准备好的医学图像和对应的掩码)
class MedicalDataset(Dataset):def __init__(self, image_paths, mask_paths, transform=None):self.image_paths = image_pathsself.mask_paths = mask_pathsself.transform = transformdef __len__(self):return len(self.image_paths)def __getitem__(self, idx):image = Image.open(self.image_paths[idx])mask = Image.open(self.mask_paths[idx])if self.transform:image = self.transform(image)mask = self.transform(mask)return image, masktransform = transforms.Compose([transforms.ToTensor()])
dataset = MedicalDataset(["image_path_1.png"], ["mask_path_1.png"], transform=transform)
dataloader = DataLoader(dataset, batch_size=1)# 初始化模型、损失函数和优化器
model = UNet()
criterion = nn.BCELoss()  # 二分类交叉熵损失,用于图像分割
optimizer = optim.Adam(model.parameters(), lr=0.001)# 训练模型
for epoch in range(1, 6):  # 假设训练5个epochfor images, masks in dataloader:optimizer.zero_grad()outputs = model(images)loss = criterion(outputs, masks)loss.backward()optimizer.step()print(f'Epoch {epoch}, Loss: {loss.item()}')

代码解释:

1.定义UNet模型:

  • UNet模型由编码器和解码器两部分组成,用于提取特征并对图像进行像素级别的预测。

2.数据加载:

  • MedicalDataset 是自定义的数据集类,加载医学图像和其对应的掩码(标签)。

3.模型训练:

  • 使用二分类交叉熵损失 BCELoss,用于判断每个像素是否属于某一病灶。
  • 通过反向传播和Adam优化器来更新模型参数。

4.推理和损失计算:

  • 对每个图像进行前向传播,计算损失,并更新模型参数。

医疗影像诊断中的深度学习模型(如UNet)能够自动检测X光、CT、MRI等图像中的病变区域,帮助医生提高诊断的效率和准确性。

总结

深度学习的发展历程从感知器到深度神经网络,经过了漫长的研究和探索。如今,深度学习技术已经渗透到多个领域,推动了人工智能的进步。通过TensorFlow、PyTorch等框架,我们能够快速构建和训练神经网络,并将其应用于图像处理、自然语言处理、语音识别等实际场景。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java项目基于docker 部署配置
  • shell指令及笔试题
  • alembic常用命令
  • QTCreator 调试:unknown debugger type “No engine“
  • 51单片机-红外遥控器(NEC标准)
  • MFC-基础架构
  • Redis——常用数据类型List
  • <<编码>> 第 16 章 存储器组织(1)--比特锁存器 示例电路
  • spark之不同序列化对比
  • 常用英语短语
  • vue3+element-plus icons图标选择组件封装
  • java集合之map
  • JAVA SE8
  • 基于 C语言的 Modbus RTU CRC 校验程序
  • 低代码平台后端搭建-阶段完结
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • Bootstrap JS插件Alert源码分析
  • ES6简单总结(搭配简单的讲解和小案例)
  • PHP的类修饰符与访问修饰符
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 初探 Vue 生命周期和钩子函数
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 代理模式
  • 服务器之间,相同帐号,实现免密钥登录
  • 猴子数据域名防封接口降低小说被封的风险
  • 讲清楚之javascript作用域
  • 类orAPI - 收藏集 - 掘金
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 区块链分支循环
  • 使用agvtool更改app version/build
  • 手写双向链表LinkedList的几个常用功能
  • 微信开放平台全网发布【失败】的几点排查方法
  • MyCAT水平分库
  • 国内开源镜像站点
  • ‌内网穿透技术‌总结
  • (7)svelte 教程: Props(属性)
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (九)c52学习之旅-定时器
  • (南京观海微电子)——COF介绍
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .JPG图片,各种压缩率下的文件尺寸
  • .Net FrameWork总结
  • .NET 快速重构概要1
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .NET框架
  • @JSONField或@JsonProperty注解使用
  • @test注解_Spring 自定义注解你了解过吗?
  • [012-1].第12节:Mysql的配置文件的使用
  • [2010-8-30]
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [2544]最短路 (两种算法)(HDU)