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

文章目录

  • 配置镜像源
  • 下载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 = 0n_total = 0with 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 += 1n_total += 1return 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个epochfor (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.rhkb.cn/news/370616.html

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

相关文章

9 redis,memcached,nginx网络组件

课程目标: 1.网络模块要处理哪些事情 2.reactor是怎么处理这些事情的 3.reactor怎么封装 4.网络模块与业务逻辑的关系 5.怎么优化reactor? io函数 函数调用 都有两个作用:io检测 是否就绪 io操作 1. int clientfd = accept(listenfd, &addr, &len); 检测 全连接队列…

技术派Spring事件监听机制及原理

Spring事件监听机制是Spring框架中的一种重要技术,允许组件之间进行松耦合通信。通过使用事件监听机制,应用程序的各个组件可以在其他组件不直接引用的情况下,相互发送和接受消息。 需求 在技术派中有这样一个需求,当发布文章或…

简单分享下python多态

目录: 一、多态是啥嘞(龙生九子各有不同,这就是多态) 二、基础的实例 三、多态的优势与应用场景 四、深入理解 一、多态是啥嘞(龙生九子各有不同,这就是多态) 多态(Polymorphism&…

如何利用算法优化广告效果

效果广告以超过67%的占比,成为了中国互联网广告预算的大头。在BAT、字节等大的媒体平台上,效果广告以CPC实时竞价广告为主。在这种广告产品的投放中,广告主或其代理公司通过针对每个广告点击出价,系统自动把这些点击出价换算成eCP…

【人工智能】-- 智能机器人

个人主页:欢迎来到 Papicatch的博客 课设专栏 :学生成绩管理系统 专业知识专栏: 专业知识 文章目录 🍉引言 🍉机器人介绍 🍈机器人硬件 🍍机械结构 🍍传感器 🍍控…

nginx配置尝试

from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.responses import JSONResponse, FileResponse, HTMLResponse import logging import os from datetime import datetime import uvicorn# 初始化日志 logging.basicConfig(filenamefile_server.lo…

学java的第3天 后端商城小程序工作

1.数据库的大坑 特殊字段名 ’我的图片表中有一个字段是描述我写成desc了,正好是mysql中的关键字 就不能使用了 2.后端编写 2.1可以把请求分开 在商品浏览页中 只显示商品的大致信息 当用户再点击其他按钮时在发出请求 2.2把请求合并 把数据整合到一起 利用ass…

SpringBoot环境集成 sms4j短信聚合

SpringBoot环境集成 sms4j短信聚合 官方文档 前言 在正式使用sms4j短信功能之前,请详细阅读本文档,依照本篇流程进行操作和配给,即可解决大部分问题,如对我们的文档有建议,请联系开发者团队, 我们将根据可…

电脑为什么会提示丢失msvcp140.dll?怎么修复msvcp140.dll文件会靠谱点

电脑为什么会提示丢失msvcp140.dll?其实只要你的msvcp140.dll文件一损坏,然而你的电脑程序需要运用到这个msvcp140.dll文件的时候,就回提示你丢失了msvcp140.dll文件!因为没有这个文件,你的很多程序都用不了的。今天我…

电脑录歌用什么软件好?分享电脑录音软件:6款

短视频普遍的今天,越来越多的人喜欢通过电脑进行音乐创作和录制。然而,面对市面上琳琅满目的电脑录音软件,很多人可能会感到困惑:电脑录歌用什么软件好呢?本文将为大家分享六款精选的录音软件,帮助大家找到…

【matlab】分类回归——智能优化算法优化径向基神经网络

目录 径向基(Radial Basis Function, RBF)神经网络 一、基本概念 二、网络结构 三、工作原理 四、学习算法 五、优点与应用 六、与BP神经网络的比较 智能优化算法 常见的智能优化算法 灰狼优化算法(Grey Wolf Optimizer, GWO&#…

品牌推广的核心价值:作用解析与意义探讨!

在激烈的市场竞争环境之下,品牌推广已经成为企业不可缺少的一部分。不仅关乎企业的知名度,对市场份额更是起到了决定性的作用。 作为一名手工酸奶品牌的创始人,目前全国也复制了100多家门店,这篇文章,我将和大家分享品…

浪潮信息携手算力企业为华东产业集群布局提供高质量算力支撑

随着信息技术的飞速发展,算力已成为推动数字经济发展的核心力量。近日,浪潮信息与五家领先的算力运营公司在南京正式签署战略合作协议,共同加速华东地区智算基础设施布局,为区域经济发展注入新动力。 进击的算力 江苏持续加码智算…

【C语言】指针(1):入门理解篇

目录 一、内存和地址 1.1内存 1.2 深入理解计算机编址 二、指针变量和地址 2.1 取地址操作符(&) 2.2 指针变量和解应用操作符 2.2.1 指针变量 2.2.2 解引用操作符 2.3指针变量的大小 三、指针变量类型的意义 3.1 指针的解引用 3.1指针-整数…

2024 年 6 月区块链游戏研报:Pixels 引发 DAU 波动,行业用户留存率差异显著

作者:Stella L (stellafootprint.network) 数据来源:区块链游戏研究页面 2024 年 6 月,加密货币市场遭遇显著回调,比特币跌幅达 7.3%,以太坊更是下跌了 9.8%。此番波动不可避免地波及区块链游戏领域,导致…

C语言 do while 循环语句练习 中

练习: 4.编写代码,演示多个字符从两端移动,向中间汇聚 // 编写代码,演示多个字符从两端移动,向中间汇聚 //welcome to china!!! //w ! //we !! //wel !!! //.... //welco…

BufferReader/BufferWriter使用时出现的问题

项目场景: 在一个文件中有一些数据,需要读取出来并替换成其他字符再写回文件中,需要用Buffer流。 问题描述 文件中的数据丢失,并且在读取前就为空,读取不到数据。 问题代码: File f new File("D:\\…

Selenium的这些自动化测试技巧你知道几个?

Selenium自动化测试技巧 与以前瀑布式开发模式不同,现在软件测试人员具有使用自动化工具执行测试用例套件的优势,而以前,测试人员习惯于通过测试脚本执行来完成测试。 但自动化测试的目的不是完全摆脱手动测试,而是最大程度地减少…

Ubuntu24.04(22.04+版本通用)Miniconda与Isaacgym

1. ubuntu24.04安装minicondda mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh解释下这段代码 bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3~/miniconda3/miniconda.sh: 指向Mi…

通信软件开发之业务知识:PON口割接什么意思?

一 PON口割接(原创总结) 在通信领域,PON口割接指的是对无源光网络(Passive Optical Network,PON)端口进行的切换或调整操作。简单来说,就是对光纤网络中的某个端口进行重新连接或重新分配&…