用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实现

本文为原创内容,未经许可不得转载。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷 P1725:琪露诺 ← 单调队列+DP

【题目来源】https://www.luogu.com.cn/problem/P1725【题目描述】 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精。 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来。但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到…

win11永久修改pdf默认打开方式

电脑总是重启或过一阵子就自动修改pdf文件打开方式为浏览器打开,按照传统方式 右键→属性,修改打开方式,不好使 得用更根本的方法!打开设置,找到 应用→默认应用 (或者 "winR"打开运行&#xff0…

解密MQTT协议:从QOS到消息传递的全方位解析

1、QoS介绍 1.1、QoS简介 使用MQTT协议的设备大部分都是运行在网络受限的环境下,而只依靠底层的TCP传输协议,并不 能完全保证消息的可靠到达。 MQTT提供了QoS机制,其核心是设计了多种消息交互机制来提供不同的服务质量,来满足…

跨语言数据格式标准化在 HarmonyOS 开发中的实践

文章目录 前言数据格式标准化的意义数据传递中的痛点标准化的优势 JSON 与 Protocol Buffers 的比较JSONProtocol Buffers HarmonyOS 跨语言数据传递示例示例代码:定义 Protocol Buffers 消息格式生成 Java 和 C 代码示例代码:Java 端序列化与传递数据C …

IPsec VPN配置实验(固定地址)

目录 实验需求 基础配置 配置第一阶段 IKE SA 配置第二阶段 IPsec SA 测试结果 清除IKE / IPsec SA命令 注意 就是IPsec的实验配置的话,它们两端的IP地址是固定的 那么就用第一阶段的主模式(Main Mode) 和第二阶段的快速模式&#xf…

Bert中文文本分类

这是一个经典的文本分类问题,使用google的预训练模型BERT中文版bert-base-chinese来做中文文本分类。可以先在Huggingface上下载预训练模型备用。https://huggingface.co/google-bert/bert-base-chinese/tree/main 我使用的训练环境是 pip install torch2.0.0; pi…

SpringBoot的pom.xml文件中,scope标签有几种配置?

1.compile(默认) 含义:表示该依赖在项目的所有阶段(编译、测试、运行)都需要。 当你依赖一个库,并且这个库是你项目的核心部分,比如 Spring Boot 的spring - boot - starter - web&#xff0c…

FPGA三模冗余TMR工具(二)

学术和商业领域有许多自动化的三模冗余TMR工具,本文介绍当前主流的基于寄存器传输级的三模冗余工具(Register-Transfer Level,RTL),基于重要软核资源的三模冗余工具,以及新兴的基于高层次综合的三模冗余工具…

STM32 I2C通信协议

单片机学习! 文章目录 目录 文章目录 前言 一、I2C通信 1.1 I2C总线 1.2 I2C通信线 1.3 同步半双工且数据应答 1.4 一主多从 二、硬件电路 2.1 I2C电路模型 2.2 I2C接线要求 2.3 I2C上拉电阻作用 三、I2C时序基本单元 3.1 起始终止条件 3.1.1 起始条件 3.1.2 终止条…

【开源】一款基于SpringBoot的智慧小区物业管理系统

一、下载项目文件 项目文件源码链接:https://pan.quark.cn/s/3998d958e182如出现网盘空间不够存的情况!!!解决办法是先用夸克手机app注册,然后保存上方链接,就可以得到1TB空间了!!&…

AMD | GPU | 深度学习 | 如何使用

问题:我在复现代码的时候,发现自己只拥有AMD的GPU,对于一个硬件小白来说,怎么办呢?我想看看怎么使用;解决: 首先要安装支持AMD的GPU的pytorch,pytorch; 使程序在安装了支…

【HarmonyOS】鸿蒙arrayBuffer和Uint8Array互相转化

【HarmonyOS】鸿蒙arrayBuffer和Uint8Array互相转化 前言 ArrayBuffer ArrayBuffer内部包含一块Native内存,该ArrayBuffer的JS对象壳被分配在虚拟机本地堆(LocalHeap)。与普通对象一样,需要经过序列化与反序列化拷贝传递&#x…

从 ELK Stack 到简单 — Elastic Cloud Serverless 上的 Elastic 可观察性

作者:来自 Elastic Bahubali Shetti, Chris DiStasio 宣布 Elastic Cloud Serverless 上的 Elastic Observability 正式发布 — 一款完全托管的可观察性解决方案。 随着组织规模的扩大,一个能够处理分布式云环境的复杂性并提供实时洞察的可观察性解决方…

MySQL数据库的索引

一、数据库的索引 1. 索引的概论 索引(Index)是书籍的重要组成部分,它列出了书中的重要名词及其对应的页码,方便读者快速查找这些名词的定义和含义。通过索引,用户无需通读整本书就能迅速找到所需的信息。 数据库索…

仓颉语言实战——1. 类型

仓颉语言实战——1. 类型 仓颉语言(Cangjie Language)是一个现代化的、简洁而强大的编程语言,它的类型系统为高效开发提供了极大的支持。本篇文章将围绕仓颉语言中的类型系统展开,结合实战代码,帮助开发者快速掌握这一…

【已解决】图片png转ico格式

起因: pyinstaller 打包时需要 ico 格式图片,但是通常手上只有png格式的图片,为了将png转为ico,直接改后缀会报错“struct.error: unpack requires a buffer of 16 bytes”,我就上网搜了一下,发现都是一些…

机器学习详解(11):分类任务的模型评估标准

模型评估是利用不同的评估指标来了解机器学习模型的性能,以及其优势和劣势的过程。评估对于确保机器学习模型的可靠性、泛化能力以及在新数据上的准确预测能力至关重要。 文章目录 1 介绍2 评估准则3 分类指标3.1 准确率 (Accuracy)3.2 精确率 (Precision)3.3 召回率…

Python-网络爬虫

随着网络的迅速发展,如何有效地提取并利用信息已经成为一个巨大的挑战。为了更高效地获取指定信息,需定向抓取并分析网页资源,从而促进了网络爬虫的发展。本章将介绍使用Python编写网络爬虫的方法。 学习目标: 理解网络爬虫的基本…

【超级详细】七牛云配置阿里云域名详细过程记录

0. 准备一个阿里云域名,记得要备案!!!! 1. 创建七牛云存储空间 首先,登录七牛云控制台,创建一个新的存储空间(Bucket)。这个存储空间将用于存放你的文件,并…

WPF使用资源定义和样式资源,解耦视图与逻辑(较多样式重复的时候使用)

-- 将Button的Style写到Window.Resources中 其中Window.Resource的Style也是可以继承的,需要使用BaseOn这个属性 还有很多用法的,有空再补充