【Python】MacBook M系列芯片Anaconda下载Pytorch,并开发一个简单的数字识别代码(附带踩坑记录)

news2024/10/7 16:15:40

文章目录

  • 配置镜像源
  • 下载Pytorch
  • 验证
  • 使用Pytorch进行数字识别

配置镜像源

Anaconda下载完毕之后,有两种方式下载pytorch,一种是用页面可视化的方式去下载,另一种方式就是直接用命令行工具去下载。
在这里插入图片描述
但是由于默认的Anaconda走的是外网,所以下载很慢,我们得首先配置镜像源,这里推荐用清华的,之前用中科大的出问题了,换成清华马上就好了。。。

打开Termial或者iTerm2
输入如下命令

conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2

然后输入如下命令查看是否ok了

conda config --show channels

在输入如下命令

conda config --set show_channel_urls yes

这个时候你的配置基本就完成了,接下来你就可以开始下载了

下载Pytorch

pytorch官网
进入到官网,然后基于你的机器配置选择命令
在这里插入图片描述
然后将命令放入到命令行中进行运行。
特别注意!!!
这里一定要把梯子等工具都关掉,不然会出现HTTP相关的异常。
可以考虑使用如下命令处理一下

conda config --set ssl_verify false

如果踩坑了,从如下几个地方思考:

  1. 镜像源问题,换镜像源
  2. ssl验证关闭,使用上面的命令
  3. 别开梯子!!!!!!!

验证

使用如下命令就可以查看是否安装成功了

conda list | grep pytorch

在这里插入图片描述

使用Pytorch进行数字识别

import torch
from torch.utils.data import DataLoader
from torchvision import transforms
from torchvision.datasets import MNIST
import matplotlib.pyplot as plt
from PIL import Image

# 定义神经网络模型
class Net(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = torch.nn.Linear(28*28, 64)  # 第一个全连接层,将输入从784维映射到64维
        self.fc2 = torch.nn.Linear(64, 64)     # 第二个全连接层,将输入从64维映射到64维
        self.fc3 = torch.nn.Linear(64, 64)     # 第三个全连接层,将输入从64维映射到64维
        self.fc4 = torch.nn.Linear(64, 10)     # 第四个全连接层,将输入从64维映射到10维(对应10个类别)
    
    def forward(self, x):
        x = torch.nn.functional.relu(self.fc1(x))  # 应用ReLU激活函数
        x = torch.nn.functional.relu(self.fc2(x))  # 应用ReLU激活函数
        x = torch.nn.functional.relu(self.fc3(x))  # 应用ReLU激活函数
        x = torch.nn.functional.log_softmax(self.fc4(x), dim=1)  # 应用log_softmax激活函数
        return x

# 定义数据加载函数
def get_data_loader(is_train):
    to_tensor = transforms.Compose([transforms.ToTensor()])  # 定义数据转换
    data_set = MNIST("", is_train, transform=to_tensor, download=True)  # 加载MNIST数据集
    return DataLoader(data_set, batch_size=15, shuffle=True)  # 创建数据加载器

# 定义模型评估函数
def evaluate(test_data, net):
    n_correct = 0
    n_total = 0
    with torch.no_grad():  # 禁用梯度计算
        for (x, y) in test_data:
            outputs = net.forward(x.view(-1, 28*28))  # 前向传播计算输出
            for i, output in enumerate(outputs):
                if torch.argmax(output) == y[i]:  # 比较预测结果与真实标签
                    n_correct += 1
                n_total += 1
    return n_correct / n_total  # 返回准确率

# 定义模型保存函数
def save_model(net, path="mnist_model.pth"):
    torch.save(net.state_dict(), path)  # 保存模型权重到文件

# 定义模型加载函数
def load_model(net, path="mnist_model.pth"):
    net.load_state_dict(torch.load(path))  # 从文件加载模型权重

# 定义图像预测函数
def predict_image(image, net):
    net.eval()  # 设置为评估模式
    with torch.no_grad():  # 禁用梯度计算
        output = net(image.view(-1, 28*28))  # 前向传播计算输出
        predicted = torch.argmax(output, dim=1)  # 获取预测结果
    return predicted.item()  # 返回预测类别

# 定义图像加载函数
def load_image(image_path):
    image = Image.open(image_path).convert('L')  # 打开图像并转换为灰度图
    transform = transforms.Compose([transforms.Resize((28, 28)), transforms.ToTensor()])  # 定义图像转换
    image = transform(image)  # 应用转换
    return image  # 返回处理后的图像

def main():
    train_data = get_data_loader(is_train=True)  # 加载训练数据
    test_data = get_data_loader(is_train=False)  # 加载测试数据
    net = Net()  # 初始化神经网络模型

    # 训练模型
    optimizer = torch.optim.Adam(net.parameters(), lr=0.001)  # 定义Adam优化器
    for epoch in range(2):  # 训练2个epoch
        for (x, y) in train_data:
            net.zero_grad()  # 清零梯度
            output = net.forward(x.view(-1, 28*28))  # 前向传播计算输出
            loss = torch.nn.functional.nll_loss(output, y)  # 计算损失
            loss.backward()  # 反向传播计算梯度
            optimizer.step()  # 更新模型参数
        print("epoch", epoch, "accuracy:", evaluate(test_data, net))  # 打印每个epoch后的准确率

    # 保存模型
    save_model(net)

    # 加载模型
    net = Net()  # 初始化新的神经网络模型
    load_model(net)  # 加载已保存的模型权重
    print("Loaded model accuracy:", evaluate(test_data, net))  # 打印加载模型后的准确率

    # 使用模型预测新图像
    image_path = "path_to_your_image.png"  # 替换为你要预测的图像路径
    image = load_image(image_path)  # 加载并预处理图像
    prediction = predict_image(image, net)  # 使用模型进行预测
    print(f"Predicted digit: {prediction}")  # 打印预测结果

if __name__ == "__main__":
    main()  # 运行main函数

第一次运行的时候,会加载数字识别模型到本地,第二次运行的时候,你就可以把训练过程的代码都注释掉了,直接使用这个最终的模型
在这里插入图片描述
第二次运行
你的模型就是这个pth文件
在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

瀚高数据库2024最新版_6.0.4_Windows版安装使用---国产瀚高数据库工作笔记007

首先去下载安装包: 下载的是企业版,可以试用一年 首先安装的时候,直接,下一步下一步就可以了 注意要用administrator去安装. 下载以后一步步去安装就可以了 ,桌面上会出现 但是连接不上,并且, 如果从管理工具中,找到服务 cmd services.msc 打开以后,找到瀚高服务,但是…

VuePress日常使用

本篇来讲解下更多关于 VuePress 的基本用法 ‍ 配置首页 现在的页面太简单了,我们可以对项目首页进行配置,修改 docs/README.md (这些配置是什么后面会说): --- home: true heroImage: https://s3.bmp.ovh/imgs/20…

zdppy_api+vue3+antd前后端分离开发,使用描述列表组件渲染用户详情信息

后端代码 import api import upload import time import amcomment import env import mcrud import amuserdetailsave_dir "uploads" env.load(".env") db mcrud.new_env()app api.Api(routes[*amcomment.get_routes(db),*amuserdetail.get_routes(db…

利用深度学习模型进行语音障碍自动评估

语音的产生涉及器官的复杂协调,因此,语音包含了有关身体各个方面的信息,从认知状态和心理状态到呼吸条件。近十年来,研究者致力于发现和利用语音生物标志物——即与特定疾病相关的语音特征,用于诊断。随着人工智能&…

Python - 递归函数(Recursive Function)的速度优化 (Python实现)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/140137432 免责声明:本文来源于个人知识与开源资料,仅用于学术交流,不包含任何商业技术,欢迎相互学…

英灵神殿mac能玩吗 英灵神殿对电脑配置要求《英灵神殿》新手攻略查询 PD虚拟机能玩英灵神殿吗

近年来,随着《英灵神殿》(Valheim)游戏的火热,越来越多的玩家被其独特的北欧神话题材和丰富的生存挑战所吸引。然而,对于Mac用户来说,如何在Mac平台上运行这款游戏可能是一个问题。此外,作为一名…

闲聊 .NET Standard

前言 有时候,我们从 Nuget 下载第三方包时,会看到这些包的依赖除了要求 .NET FrameWork、.NET Core 等的版本之外,还会要求 .NET Standard 的版本,比如这样: 这个神秘的 .NET Standard 是什么呢? .NET St…

JAVA连接FastGPT实现流式请求SSE效果

FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景! 一、先看效果 真正实流式请求,SSE效果,SSE解释&am…

【CH32V305FBP6】USBD HS 虚拟串口分析

文章目录 前言分析端点 0USBHS_UIS_TOKEN_OUT 端点 2USBHS_UIS_TOKEN_OUTUSBHS_UIS_TOKEN_IN 前言 虚拟串口,端口 3 单向上报,端口 2 双向收发。 分析 端点 0 USBHS_UIS_TOKEN_OUT 设置串口参数: 判断 USBHS_SetupReqCode CDC_SET_LIN…

AutoCAD Mechanical下载安装;Mechanical针对机械设计领域开发的CAD软件下载安装!

在AutoCAD Mechanical的助力下,用户能够轻松应对二维绘图与三维建模两大核心任务。二维绘图方面,软件提供了精准且灵活的绘图工具,使得工程师能够迅速勾勒出机械部件的轮廓与细节,大大提高了工作效率。 而在三维建模方面&#xff…

由于找不到d3dx9_43.dll是什么意思?教你快速修复d3dx9_43.dll

由于找不到d3dx9_43.dll是什么意思?就是d3dx9_43.dll文件丢失了,你的某些程序加载不出来了!需要你去修复了d3dx9_43.dll文件,你的程序才可以正常运行,今天我们就来给大家详细的说说找不到d3dx9_43.dll的详细分析。 一.…

kaggle量化赛金牌方案(第七名解决方案)

获奖文章(第七名解决方案) 致谢 我要感谢 Optiver 和 Kaggle 组织了这次比赛。这个挑战提出了一个在金融市场时间序列预测领域中具有重大和复杂性的问题。 方法论 我的方法结合了 LightGBM 和神经网络模型,对神经网络进行了最少的特征工程。目标是结合这些模型以降低最终…

C++初学者指南-3.自定义类型(第一部分)-析构函数

C初学者指南-3.自定义类型(第一部分)-析构函数 文章目录 C初学者指南-3.自定义类型(第一部分)-析构函数特殊的成员函数用户定义的构造函数和析构函数RAII示例:资源处理示例:RAII记录零规则 特殊的成员函数 T::T()默认构造函数当创建新的 T 对象时运行。…

Linux指定文件权限的两种方式-符号与八进制数方式示例

一、指定文件权限可用的两种方式: 对于八进制数指定的方式,文件权限字符代表的有效位设为‘1’,即“rw-”、“rw-”、“r--”,以二进制表示为“110”、“110”、“100”,再转换为八进制6、6、4,所以777代表…

Golang中defer和return顺序

在Golang中,defer 和 return 的执行顺序是一个重要的特性,它们的执行顺序如下: return语句不是一条单独的语句,实际上,它是由赋值和返回两部分组成的。赋值步骤会先执行,这一步会计算return语句中的表达式…

【YOLOv5进阶】——引入注意力机制-以SE为例

声明:笔记是做项目时根据B站博主视频学习时自己编写,请勿随意转载! 一、站在巨人的肩膀上 SE模块即Squeeze-and-Excitation 模块,这是一种常用于卷积神经网络中的注意力机制!! 借鉴代码的代码链接如下&a…

代码随想录Day69(图论Part05)

并查集 // 1.初始化 int fa[MAXN]; void init(int n) {for (int i1;i<n;i)fa[i]i; }// 2.查询 找到的祖先直接返回&#xff0c;未进行路径压缩 int.find(int i){if(fa[i] i)return i;// 递归出口&#xff0c;当到达了祖先位置&#xff0c;就返回祖先elsereturn find(fa[i])…

大Excel表格76M,电脑16G内存打不开,内存利用率100%虚拟内存占用16G还是卡死提示内存不足,如何才能查看里面内容?

环境: Excel2016 问题描述: 大Excel表格76M,电脑16G内存打不开,内存利用率100%虚拟内存占用16G还是卡死提示内存不足,如何才能查看里面内容? 解决方案: 遇到这种情况,说明Excel文件非常大,超出了你当前计算机配置的处理能力。以下是一些解决方法,帮助你尝试打开或…

【Arduino】XIAOFEIYU实验ESP32使用TOUCH触摸模块(图文)

今天XIAOFEIYU继续来实验ESP32使用传感器模块&#xff0c;这次用到的模块为TOUCH触摸模块。 三个针脚分别为正负极&#xff0c;IO针脚。 #define pin 25void setup(){Serial.begin(9600); pinMode(pin, INPUT); }float value 0.0; void loop(){value digitalRead(pin); …

Andrej Karpathy提出未来计算机2.0构想: 完全由神经网络驱动!网友炸锅了

昨天凌晨&#xff0c;知名人工智能专家、OpenAI的联合创始人Andrej Karpathy提出了一个革命性的未来计算机的构想&#xff1a;完全由神经网络驱动的计算机&#xff0c;不再依赖传统的软件代码。 嗯&#xff0c;这是什么意思&#xff1f;全部原生LLM硬件设备的意思吗&#xff1f…