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

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

第四部分:深度学习的框架和使用方法

在这里插入图片描述

用Python开启人工智能之旅(一)Python简介与安装

用Python开启人工智能之旅(二)Python基础

用Python开启人工智能之旅(三)常用的机器学习算法与实现

用Python开启人工智能之旅(四)常用的机器学习算法与实现

用Python开启人工智能之旅(五)AI项目实战中Python基础

深度学习作为机器学习的一个分支,涉及到大量的计算和模型训练。在Python中,众多深度学习框架和包为开发者提供了高效的计算资源和灵活的模型构建方式。在这一部分,我们将介绍常用的深度学习框架,并展示如何使用它们实现各种深度学习任务。

主要包括以下内容:

  1. TensorFlow与Keras
  2. PyTorch
  3. MXNet
  4. Theano
  5. 深度学习常用工具包
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 就没问题了...

信号仿真高级工程师面试题

信号仿真高级工程师面试题可能涵盖多个方面,旨在全面评估应聘者的专业知识、技能水平、实践经验和问题解决能力。以下是一些可能的面试题及其简要解析: 一、专业知识与技能 描述你对信号仿真的理解 考察点:对信号仿真基本概念、原理及应用的掌握程度。参考答案:信号仿真是…...

循环和迭代

从更高层次的思维角度来看迭代和循环的区别: 哲学层面: 迭代体现了"螺旋上升"的发展理念,每次迭代都在前一次的基础上有所提升和改进 循环体现了"周而复始"的概念,强调重复相同的过程 思维方式&#xff1a…...

一个简单封装的的nodejs缓存对象

我们在日常编码中,经常会用到缓存,而一个有效的缓存管理,也是大家必不可少的工具。而nodejs没有内置专用的缓存对象,并且由于js的作用域链的原因,很多变量使用起来容易出错,如果用一个通用的缓存管理起来&a…...

【Rust自学】5.3. struct的方法(Method)

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 5.3.1. 什么是方法(Method) 方法和函数类似,也是用fn关键字进行声明,方法也有名称,也有参数&#xff…...

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. 配置 第二步配置完成就可以访问&#xff1a;http://localhost…...

Xcode 16 编译弹窗问题、编译通过无法,编译通过打包等问题汇总

问题1&#xff1a;打包的过程中不断提示 &#xff1a;codesign 想要访问你的钥匙串中的密钥“develop 或者distribution 证书” 解决&#xff1a;打开钥匙串&#xff0c;点击证书---显示简介---信任----改为始终信任 &#xff08;记住 &#xff1a;不能只修改钥匙的显示简介的…...

卷积神经网络入门指南:从原理到实践

目录 1 CNN的发展历史 2 CNN的基本原理 3 CNN核心组件 3.1 卷积操作基础 3.2 卷积层详解 3.3 高级卷积操作 3.3.1 分组卷积&#xff08;Group Convolution&#xff09; 3.3.2 深度可分离卷积&#xff08;Depthwise Separable Convolution&#xff09;&#xff1a; 3.3 池…...

eNSP安装教程(内含安装包)

通过网盘分享的文件&#xff1a;eNSP模拟器.zip 链接: https://pan.baidu.com/s/1wPmAr4MV8YBq3U5i3hbhzQ 提取码: tefj --来自百度网盘超级会员v1的分享 &#xff01;&#xff01;&#xff01;&#xff01;解压后有四个文件&#xff0c;先安装Box&#xff0c;第二个安装cap&a…...

VBA技术资料MF244:利用VBA在图表工作表中创建堆积条形图

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…...

【计算机网络安全】网络攻击

实验二 网络攻击 实验人员&#xff1a;第五组全体成员 一、实验目的&#xff1a; 1&#xff1a;掌握ARP欺骗的原理&#xff0c;实践ARP欺骗的过程。 2&#xff1a;掌握TCP劫持的原理&#xff0c;实践TCP劫持的过程。 3&#xff1a;掌握DNS欺骗的原理&#xff0c;实践DN…...

20241230 基础数学-线性代数-(1)求解特征值(numpy, scipy)

所有代码实现&#xff0c;基于教程中的理论通过python实现出来的。效率不高&#xff0c;但有代码可以看。 由于scipy/sckitlearn/sparkx 底层的实现都被封装了&#xff08;小白兔水平有限&#xff0c;fortran代码实在没看懂&#xff09;这里的实现至少可以和理论公式对应的上。…...

基于图注意力网络的两阶段图匹配点云配准方法

Two-stage graph matching point cloud registration method based on graph attention network— 基于图注意力网络的两阶段图匹配点云配准方法 从两阶段点云配准方法中找一些图匹配的一些灵感。文章提出了两阶段图匹配点云配准网络&#xff08;TSGM-Net&#xff09; TSGM-Ne…...

【半导体光电子器件】课后习题答案和知识点汇总

关注作者了解更多 我的其他CSDN专栏 求职面试 大学英语 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处…...

Unity命令行传递自定义参数 命令行打包

命令行参数增加位置 -executeMethod 某脚本.某方法 参数1 参数2 参数3 ... 例如执行EditorTest.GetCommandLineArgs方法 增加两个命令行参数 Version=125 CDNVersion=100 -executeMethod EditorTest.GetCommandLineArgs Version=125 CDNVersion=100 Unity测试脚本 需要放在…...

web-worker应用在大文件切片上传

当文件体积过大时&#xff0c;传统的文件上传方式往往会导致页面卡顿&#xff0c;用户体验不佳。为了解决这一问题&#xff0c;我们可以利用Web Worker技术来进行大文件的切片上传。本文将详细介绍如何使用Web Worker进行大文件切片上传&#xff0c;并通过具体的例子来演示其实…...

Django 模板分割及多语言支持案例【需求文档】-->【实现方案】

Django 模板分割及多语言支持案例 这个案例旨在提供一个清晰的示范&#xff0c;展示如何将复杂的页面分解为多个可复用的模板组件&#xff0c;使代码更加模块化和易于管理。希望这篇案例文章对你有所帮助。 概述 在 Django 项目开发中&#xff0c;使用模板分割和多语言支持能…...

C中设计不允许继承的类的实现方法是什么?

在C中&#xff0c;设计不允许继承的类可以通过多种方法实现。以下是详细的方法说明及示例&#xff1a; ### 方法一&#xff1a;将构造函数和析构函数设为私有 这种方法的核心思想是通过将构造函数和析构函数设为私有&#xff0c;使得子类无法调用这些函数&#xff0c;从而无法…...

面对小白的C语言学习方法

这是第20篇文章&#xff0c;不来弄一些技术的&#xff0c;弄一些最近的学习心得&#xff0c;怎么更有效地自学C语言 书籍 书籍可以很有效的告知我们专有函数&#xff0c;使用方法还有一些思考方式&#xff0c;缺点是实操差点意思&#xff0c;还是不太能解决实际问题&#xff…...

使用libgif库解码全过程(C语言)-包括扩展块的处理

我看到的所有例程&#xff0c;都把扩展部分的处理跳过了&#xff0c;而我的动画是有透明度的&#xff0c;这就导致解码后的图像在有透明色的像素部分&#xff0c;呈现了很多的黑点&#xff0c;或者闪白的情况出现。经过调试&#xff0c;终于成功。 文件格式 先了解一下GIF的文…...

blazor实现ASP.NET网站用户批量注册方法

ASP.NET网站用户批量注册是许多使用blazor系统开发遇到的问题,为了解决这个问题,我们提出比较完善的解决方法,通过代码实现了一个批量用户注册功能,用于解析一份用户名列表,并通过后台服务注册用户,同时对成功和失败的注册进行记录和反馈。以下是实现功能的详细工作原理描…...

SpringCloud 入门(4)—— 网关

上一篇&#xff1a;SpringCloud 入门&#xff08;3&#xff09;—— Nacos配置中心-CSDN博客 Spring Cloud Gateway 作为 Spring Cloud 生态系统的一部分&#xff0c;主要在微服务架构中充当 API 网关的角色。它提供了统一的入口点来处理所有的 HTTP 请求&#xff0c;并将这些请…...

什么是WebAssembly?怎么使用?

一、简述 WebAssembly&#xff0c;也称为Wasm&#xff0c;是基于堆栈的虚拟机的二进制指令格式。它被设计为一个可移植的目标&#xff0c;用于编译C、C和Rust等高级编程语言&#xff0c;允许代码以接近本机速度在web浏览器中运行。WebAssembly于2015年由包括谷歌、微软、Mozill…...