用Python开启人工智能之旅(四)深度学习的框架和使用方法
第四部分:深度学习的框架和使用方法

用Python开启人工智能之旅(一)Python简介与安装
用Python开启人工智能之旅(二)Python基础
用Python开启人工智能之旅(三)常用的机器学习算法与实现
用Python开启人工智能之旅(四)常用的机器学习算法与实现
用Python开启人工智能之旅(五)AI项目实战中Python基础
深度学习作为机器学习的一个分支,涉及到大量的计算和模型训练。在Python中,众多深度学习框架和包为开发者提供了高效的计算资源和灵活的模型构建方式。在这一部分,我们将介绍常用的深度学习框架,并展示如何使用它们实现各种深度学习任务。
主要包括以下内容:
- TensorFlow与Keras
- PyTorch
- MXNet
- Theano
- 深度学习常用工具包
4.1 TensorFlow与Keras
TensorFlow是由Google开发的开源深度学习框架,广泛应用于图像识别、自然语言处理等领域。TensorFlow原生支持分布式计算,并具有强大的社区支持。Keras是TensorFlow的高级API,简化了模型的构建与训练过程,使得深度学习变得更加容易。
- TensorFlow:用于模型的定义、训练和评估,支持低级别的控制与优化。
- Keras:提供高级API,构建深度学习模型更加直观和简洁。
4.1.1 安装TensorFlow与Keras
在使用TensorFlow之前,首先需要安装TensorFlow包。Keras已经集成在TensorFlow中,因此安装TensorFlow就能使用Keras。
pip install tensorflow
4.1.2 TensorFlow与Keras实现基本模型
下面是一个使用Keras构建和训练简单神经网络的例子。
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
import numpy as np# 加载数据
iris = load_iris()
X = iris.data
y = iris.target
y = np.expand_dims(y, axis=1)# 数据预处理
encoder = OneHotEncoder(sparse=False)
y = encoder.fit_transform(y)# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)# 创建简单的神经网络模型
model = Sequential()
model.add(Dense(10, input_dim=4, activation='relu')) # 隐藏层
model.add(Dense(3, activation='softmax')) # 输出层,3个分类# 编译模型
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])# 训练模型
model.fit(X_train, y_train, epochs=100, batch_size=10, verbose=1)# 测试模型
_, accuracy = model.evaluate(X_test, y_test)
print(f'Accuracy: {accuracy * 100:.2f}%')
4.2 PyTorch
PyTorch是由Facebook开发的深度学习框架,以其动态计算图和强大的GPU支持而闻名。它具有灵活性和易于调试的特点,广泛应用于学术研究和工业实践中。与TensorFlow不同,PyTorch使用动态图,这使得它更容易调试和修改模型。
4.2.1 安装PyTorch
pip install torch torchvision
4.2.2 PyTorch实现基本模型
下面是一个使用PyTorch构建简单神经网络并进行训练的示例。
import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
import numpy as np# 加载数据
iris = load_iris()
X = iris.data
y = iris.target
y = np.expand_dims(y, axis=1)# 数据预处理
encoder = OneHotEncoder(sparse=False)
y = encoder.fit_transform(y)# 转换为Tensor
X = torch.tensor(X, dtype=torch.float32)
y = torch.tensor(y, dtype=torch.float32)# 创建训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)# 定义神经网络模型
class SimpleNN(nn.Module):def __init__(self):super(SimpleNN, self).__init__()self.layer1 = nn.Linear(4, 10) # 输入层到隐藏层self.layer2 = nn.Linear(10, 3) # 隐藏层到输出层def forward(self, x):x = torch.relu(self.layer1(x))x = self.layer2(x)return x# 初始化模型
model = SimpleNN()# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 训练模型
for epoch in range(100):model.train()optimizer.zero_grad()outputs = model(X_train)loss = criterion(outputs, torch.max(y_train, 1)[1]) # 使用CrossEntropyLossloss.backward()optimizer.step()if (epoch + 1) % 10 == 0:print(f'Epoch [{epoch+1}/100], Loss: {loss.item():.4f}')# 测试模型
model.eval()
with torch.no_grad():outputs = model(X_test)_, predicted = torch.max(outputs.data, 1)_, labels = torch.max(y_test, 1)accuracy = (predicted == labels).sum().item() / len(y_test)print(f'Accuracy: {accuracy * 100:.2f}%')
4.3 MXNet
MXNet是一个高效的深度学习框架,由Apache基金会管理,支持分布式计算并可以部署在多个平台。MXNet的特点是灵活性和高效性,支持多种语言接口,包括Python、Scala、Julia和R。
4.3.1 安装MXNet
pip install mxnet
4.3.2 MXNet实现基本模型
以下是一个使用MXNet实现简单神经网络的示例:
import mxnet as mx
from mxnet import nd, gluon, autograd
from mxnet.gluon import nn
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
import numpy as np# 加载数据
iris = load_iris()
X = iris.data
y = iris.target
y = np.expand_dims(y, axis=1)# 数据预处理
encoder = OneHotEncoder(sparse=False)
y = encoder.fit_transform(y)# 转换为NDArray
X = nd.array(X)
y = nd.array(y)# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)# 定义网络结构
class SimpleNN(gluon.nn.Block):def __init__(self, **kwargs):super(SimpleNN, self).__init__(**kwargs)self.dense0 = nn.Dense(10, activation='relu')self.dense1 = nn.Dense(3, activation='softmax')def forward(self, x):x = self.dense0(x)x = self.dense1(x)return x# 初始化模型
model = SimpleNN()
model.initialize(mx.init.Xavier(), ctx=mx.cpu())# 定义损失函数和优化器
loss_fn = gluon.loss.SoftmaxCrossEntropyLoss()
optimizer = gluon.Trainer(model.collect_params(), 'adam')# 训练模型
for epoch in range(100):with autograd.record():output = model(X_train)loss = loss_fn(output, y_train)loss.backward()optimizer.step(len(X_train))if (epoch + 1) % 10 == 0:print(f'Epoch [{epoch+1}/100], Loss: {loss.mean().asscalar():.4f}')# 测试模型
output = model(X_test)
accuracy = (nd.argmax(output, axis=1) == nd.argmax(y_test, axis=1)).mean().asscalar()
print(f'Accuracy: {accuracy * 100:.2f}%')
4.4 Theano
Theano是一个深度学习框架,早期由蒙特利尔大学开发,并为深度学习的研究提供了强大的支持。尽管现在Theano的开发已停止,但它仍然在许多学术研究中被使用。
4.4.1 安装Theano
pip install theano
4.4.2 Theano实现基本模型
以下是一个使用Theano实现简单神经网络的例子:
import numpy as np
import theano
import theano.tensor as T
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder# 加载数据
iris = load_iris()
X = iris.data
y = iris.target
y = np.expand_dims(y, axis=1)# 数据预处理
encoder = OneHotEncoder(sparse=False)
y = encoder.fit_transform(y)# 定义输入和输出变量
X_tensor = T.dmatrix('X')
y_tensor = T.dmatrix('y')# 定义权重和偏置
W = theano.shared(np.random.randn(4, 3), name='W')
b = theano.shared(np.zeros(3), name='b')# 定义模型输出
output = T.nnet.softmax(T.dot(X_tensor, W) + b)# 定义损失函数
loss = T.mean(T.nnet.categorical_crossentropy(output, y_tensor))# 定义梯度和更新规则
grad_W, grad_b = T.grad(loss, [W, b])
learning_rate = 0.01
update_W = W - learning_rate * grad_W
update_b = b - learning_rate * grad_b# 定义训练函数
train = theano.function(inputs=[X_tensor, y_tensor], outputs=loss, updates=[(W, update_W), (b, update_b)])# 训练模型
for epoch in range(100):loss_val = train(X, y)if (epoch + 1) % 10 == 0:print(f'Epoch [{epoch+1}/100], Loss: {loss_val:.4f}')
4.5 深度学习常用工具包
- NumPy:深度学习中的基础工具,用于矩阵运算和数组操作。
- Pandas:用于数据处理和分析,帮助组织数据集。
- Matplotlib/Seaborn:可视化工具,帮助展示训练过程中的损失值、准确率等指标。
- Scikit-learn:用于数据预处理、评估、模型选择等。
这些工具包在深度学习项目中通常会与TensorFlow、PyTorch等框架一起使用,提供了丰富的支持和功能。
总结
在本部分中,介绍了常见的深度学习框架,包括TensorFlow、Keras、PyTorch、MXNet和Theano,并提供了使用这些框架实现基础深度学习模型的示例。这些框架为深度学习模型的构建、训练和部署提供了强大的支持,可以根据个人的需求和项目特点选择合适的工具包。
用Python开启人工智能之旅(一)Python简介与安装
用Python开启人工智能之旅(二)Python基础
用Python开启人工智能之旅(三)常用的机器学习算法与实现
用Python开启人工智能之旅(四)常用的机器学习算法与实现
用Python开启人工智能之旅(五)AI项目实战中Python基础
了解更多关于AI算法Python实现文章,欢迎关注这个专栏! 点击进入:AI算法Python实现
本文为原创内容,未经许可不得转载。
相关文章:
用Python开启人工智能之旅(四)深度学习的框架和使用方法
第四部分:深度学习的框架和使用方法 用Python开启人工智能之旅(一)Python简介与安装 用Python开启人工智能之旅(二)Python基础 用Python开启人工智能之旅(三)常用的机器学习算法与实现 用Pyt…...
两分钟解决:vscode卡在设置SSH主机,VS Code-正在本地初始化VSCode服务器
问题原因 remote-ssh还是有一些bug的,在跟新之后可能会一直加载初始化SSH主机解决方案 1.打开终端2.登录链接vscode的账号,到家目录下3.找到 .vscode-server文件,删掉这个文件4.重启 vscode 就没问题了...
信号仿真高级工程师面试题
信号仿真高级工程师面试题可能涵盖多个方面,旨在全面评估应聘者的专业知识、技能水平、实践经验和问题解决能力。以下是一些可能的面试题及其简要解析: 一、专业知识与技能 描述你对信号仿真的理解 考察点:对信号仿真基本概念、原理及应用的掌握程度。参考答案:信号仿真是…...
循环和迭代
从更高层次的思维角度来看迭代和循环的区别: 哲学层面: 迭代体现了"螺旋上升"的发展理念,每次迭代都在前一次的基础上有所提升和改进 循环体现了"周而复始"的概念,强调重复相同的过程 思维方式:…...
一个简单封装的的nodejs缓存对象
我们在日常编码中,经常会用到缓存,而一个有效的缓存管理,也是大家必不可少的工具。而nodejs没有内置专用的缓存对象,并且由于js的作用域链的原因,很多变量使用起来容易出错,如果用一个通用的缓存管理起来&a…...
【Rust自学】5.3. struct的方法(Method)
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 5.3.1. 什么是方法(Method) 方法和函数类似,也是用fn关键字进行声明,方法也有名称,也有参数ÿ…...
ChatGPT之父:奥尔特曼
奥尔特曼 阿尔特曼一般指萨姆奥尔特曼,他是OpenAI的联合创始人兼首席执行官,被称为“ChatGPT之父”.以下是其具体介绍: 个人经历 1985年4月22日出生于美国芝加哥,8岁学会编程,9岁拥有电脑,对信息技术和互联网产生兴趣.高中就读于约翰巴勒斯中学,后进入斯坦福大学主修计…...
如何在谷歌浏览器中设置桌面快捷方式
在日常使用电脑时,反复在浏览器中输入经常访问的网址不仅耗时,而且降低了工作效率。为了解决这一问题,我们可以通过在主屏幕上创建谷歌浏览器的快捷方式来简化操作。本文将详细介绍如何在Windows和Mac系统中实现这一功能。 一、步骤概述 1. …...
systemverilog中的priority if
1 基本概念 在 SystemVerilog 中,priority - if是一种条件判断结构。它和普通的if - else语句类似,但在条件评估和错误检查方面有自己的特点,主要用于按顺序评估多个条件,并且对不符合预期的情况进行报错。报错如下两点 当所有条件…...
图像处理-Ch2-空间域的图像增强
Ch2 空间域的图像增强 文章目录 Ch2 空间域的图像增强Background灰度变换函数(Gray-level Transformation)对数变换(Logarithmic)幂律变换(Power-Law)分段线性变换函数(Piecewise-Linear)对比度拉伸(Contrast-Stretching)灰度级分层(Gray-level Slicing) 直方图处理(Histogram …...
css 编写注意-1-命名约定
编写按照可维护性、性能和可读性规则: 1.代码组织与结构 层次清晰:使用模块化的结构,将样式分块组织。命名规范:采用统一的命名规则(如 BEM、SMACSS)以增强可读性。 /* BEM …...
虚幻引擎反射机制
在虚幻引擎中,反射系统是一种强大的机制,它允许开发者和引擎本身在运行时获取并操作类、对象、属性和方法的元信息。这个系统是基于UObject(Unreal Engine中所有支持反射的对象的基类)构建的,为游戏开发提供了极大的灵…...
Knife4j Swagger
1. 依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version></dependency>2. 配置 第二步配置完成就可以访问:http://localhost…...
Xcode 16 编译弹窗问题、编译通过无法,编译通过打包等问题汇总
问题1:打包的过程中不断提示 :codesign 想要访问你的钥匙串中的密钥“develop 或者distribution 证书” 解决:打开钥匙串,点击证书---显示简介---信任----改为始终信任 (记住 :不能只修改钥匙的显示简介的…...
卷积神经网络入门指南:从原理到实践
目录 1 CNN的发展历史 2 CNN的基本原理 3 CNN核心组件 3.1 卷积操作基础 3.2 卷积层详解 3.3 高级卷积操作 3.3.1 分组卷积(Group Convolution) 3.3.2 深度可分离卷积(Depthwise Separable Convolution): 3.3 池…...
eNSP安装教程(内含安装包)
通过网盘分享的文件:eNSP模拟器.zip 链接: https://pan.baidu.com/s/1wPmAr4MV8YBq3U5i3hbhzQ 提取码: tefj --来自百度网盘超级会员v1的分享 !!!!解压后有四个文件,先安装Box,第二个安装cap&a…...
VBA技术资料MF244:利用VBA在图表工作表中创建堆积条形图
我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…...
【计算机网络安全】网络攻击
实验二 网络攻击 实验人员:第五组全体成员 一、实验目的: 1:掌握ARP欺骗的原理,实践ARP欺骗的过程。 2:掌握TCP劫持的原理,实践TCP劫持的过程。 3:掌握DNS欺骗的原理,实践DN…...
20241230 基础数学-线性代数-(1)求解特征值(numpy, scipy)
所有代码实现,基于教程中的理论通过python实现出来的。效率不高,但有代码可以看。 由于scipy/sckitlearn/sparkx 底层的实现都被封装了(小白兔水平有限,fortran代码实在没看懂)这里的实现至少可以和理论公式对应的上。…...
基于图注意力网络的两阶段图匹配点云配准方法
Two-stage graph matching point cloud registration method based on graph attention network— 基于图注意力网络的两阶段图匹配点云配准方法 从两阶段点云配准方法中找一些图匹配的一些灵感。文章提出了两阶段图匹配点云配准网络(TSGM-Net) TSGM-Ne…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...
