深度学习==FNN全连接神经网络手写数字识别

模型训练

import torch
from torch import nn, optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader# 定义全连接神经网络模型
class FNN(nn.Module):def __init__(self):super(FNN, self).__init__()self.fc1 = nn.Linear(28 * 28, 128)self.fc2 = nn.Linear(128, 64)self.fc3 = nn.Linear(64, 10)def forward(self, x):x = x.view(-1, 28 * 28)  # 将输入图像展平为一维x = torch.relu(self.fc1(x))x = torch.relu(self.fc2(x))x = self.fc3(x)return x# 数据预处理
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])# 加载MNIST数据集
trainset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
trainloader = DataLoader(trainset, batch_size=64, shuffle=True)# 创建模型实例
model = FNN()# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)# 训练模型
epochs = 5
for epoch in range(epochs):running_loss = 0for images, labels in trainloader:optimizer.zero_grad()output = model(images)loss = criterion(output, labels)loss.backward()optimizer.step()running_loss += loss.item()print(f"Epoch {epoch+1} - Loss: {running_loss / len(trainloader)}")# 保存模型
torch.save(model.state_dict(), 'fnn_model.pth')
print("模型已保存为 fnn_model.pth")

测试

from flask import Flask, request, jsonify
import torch
from torchvision import transforms
from PIL import Image
import io
from torch import nn, optimclass FNN(nn.Module):def __init__(self):super(FNN, self).__init__()self.fc1 = nn.Linear(28 * 28, 128)self.fc2 = nn.Linear(128, 64)self.fc3 = nn.Linear(64, 10)def forward(self, x):x = x.view(-1, 28 * 28)  # 将输入图像展平为一维x = torch.relu(self.fc1(x))x = torch.relu(self.fc2(x))x = self.fc3(x)return x# 定义 Flask app
app = Flask(__name__)# 加载已保存的模型
model = FNN()
model.load_state_dict(torch.load('fnn_model.pth'))
model.eval()# 数据预处理函数
def transform_image(image_bytes):transform = transforms.Compose([transforms.Grayscale(), transforms.Resize((28, 28)),transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])image = Image.open(io.BytesIO(image_bytes))return transform(image).unsqueeze(0)  # 添加 batch 维度# 预测函数
def get_prediction(image_tensor):output = model(image_tensor)_, predicted = torch.max(output, 1)return predicted.item()# 定义 API 路由
@app.route('/predict', methods=['POST'])
def predict():if request.method == 'POST':if 'file' not in request.files:return jsonify({'error': 'No file provided'}), 400file = request.files['file']if file:image_bytes = file.read()image_tensor = transform_image(image_bytes)prediction = get_prediction(image_tensor)return jsonify({'prediction': prediction})# 运行 Flask 应用
if __name__ == '__main__':app.run(debug=True)

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

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

相关文章

Python画笔案例-056 绘制正方形金字塔

1、绘制正方形金字塔 通过 python 的turtle 库绘制 正方形金字塔,如下图: 2、实现代码 绘制正方形金字塔,以下为实现代码: """正方形金字塔.py """ import turtledef draw_square(length):for _ in

设计模式之组合模式例题

答案:C A 知识点:组合模式的意图:将对象组合成树型结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性

数据挖掘实战-基于SARIMA时间序列模型预测阿里巴巴股票数据趋势

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

android kotlin Extension扩展函数

1、新建一个kt文件&#xff1a; 2、代码&#xff1a; class User(var name:String)/**扩展函数**/ fun User.Print(){print("用户名 $name") }// 扩展函数 swap,调换不同位置的值 fun MutableList<Int>.swap(index1: Int, index2: Int) {val tmp this[index1…

新手必看:一步步教你绑定常见邮箱到第三方应用(如何绑定QQ、163、Hotmail、Gmail等邮箱)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 邮箱绑定 📒📫 QQ邮箱📫 163邮箱📫 Hotmail邮箱📫 Gmail邮箱📫 Yahoo邮箱📫 iCloud邮箱📫 其他邮箱⚓️ 相关链接 ⚓️📖 介绍 📖 你是否曾经为绑定第三方邮箱而感到困惑?你不是一个人!许多人在尝试将QQ邮…

Linux进程概念1

前言 从这篇博客开始&#xff0c;后面我们主要讲xshell中Linux内容&#xff0c;C后续会继续补充一点 Linux基础内容我就不讲了&#xff0c;直接从进程开始讲 1. 进程是什么 像这种程序正在运行&#xff0c;还没有结束的过程就是一个进程&#xff0c;进程在电脑底部就是.exe文…

vscode 顶部 Command Center,minimap

目录 vscode 顶部 Command Center 设置显示步骤: minimap设置 方法一:使用设置界面 方法二:使用命令面板 方法三:编辑 settings.json 文件 左侧目录树和编辑器字体不一致: vscode 顶部 Command Center Visual Studio Code (VSCode) 中的 Command Center 是一个集中…

11年408考研真题解析-计算机网络

第一题&#xff1a; 解析&#xff1a;网络层虚电路服务和数据报服务 传输服务只有&#xff1a;有连接可靠和无连接不可靠两种&#xff0c;直接排除BC。 网络层指的是IP协议&#xff0c;由图二可知&#xff1a;运输层&#xff0c;网际层&#xff0c;网络接口层唯一有连接可靠的协…

vue3 本地windows下的字体的引用

1、先上了张效果&#xff1a; 2、windows 字体的路径&#xff1a;c:/windows/fonts/ 我们用华文行楷来测试下&#xff0c;先将华文行楷拷贝到/src/assets/fonts目录下。 3、然后我们来定义css&#xff1a; font-face {font-family: fyxk;font-style: normal;src: local(Opensan…

图结构感知的Transformer:一种新的图表示学习方法

人工智能咨询培训老师叶梓 转载标明出处 尽管图神经网络&#xff08;GNNs&#xff09;在处理图数据方面取得了显著成就&#xff0c;但它们在表达能力和捕获长距离依赖方面存在局限性。为了突破这些局限&#xff0c;研究者们开始探索将Transformer架构应用于图表示学习。在此基…

人工智能的前景与未来就业市场:机遇、挑战与社会影响

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐渗透到我们生活的方方面面&#xff0c;它不仅引领着技术革新的浪潮&#xff0c;更在无声中重塑着我们的就业市场和社会结构。站在这个时代的交汇点上&#xff0c;我们不禁要问&#xff1a;人工智能将…

Web Components之继承

我们在使用Web Components自定义组件的时候&#xff0c;我们需要继承HTMLElement这个浏览器内置对象&#xff0c;但是如果我要一些高级封装&#xff0c;给组件内置一些方法的话。我们就需要使用继承的方式&#xff0c;在父类中实现基本功能的封装。 1 父类的封装 以下是我的继…

Java多线程(1)—线程基础

一、关于线程 1.1 简介 计算机线程&#xff08;Thread&#xff09;是操作系统能够进行运算调度的最小单位。线程的优势在于提高了程序的效率和响应能力&#xff0c;尤其在处理 I/O 操作或多任务时。多线程编程能够充分利用多核处理器的计算能力&#xff0c;达到更高的性能。 …

Spring 源码分析

Spring 源码版本 4.2.8.RELEASE Bean 生命周期 动态代理 代理模式 优点: 在不修改目标对象的功能前提下&#xff0c;能通过代理对象对目标功能扩展缺点: 代理对象需要与目标对象实现一样的接口&#xff0c;所以会有很多代理类&#xff0c;一旦接口增加方法&#xff0c;目标对…

Apifox 「定时任务」操作指南,解锁自动化测试的新利器

定时任务是按照预设时间自动执行的任务&#xff0c;它可以有效解决一些常见问题&#xff0c;比如频繁执行的回归测试和大规模的接口测试&#xff0c;这些任务需要在固定时间点或间隔周期内自动运行&#xff0c;以确保软件的持续集成和持续交付过程中的稳定性和可靠性。通过使用…

Windows下 批量重命名文件【bat实现】-两个小问题

Windows下 批量重命名文件【bat实现】_bat批量重命名文件ren-CSDN博客 上面是原来的教程&#xff0c;我遇到了两个小问题&#xff0c;问题及解决如下&#xff1a; ①dir/b>rename.csv : 无法将“dir/b>rename.csv”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。…

【每天学个新注解】Day 2 Lombok注解简解(一)—@Data、@Build、@Value

Data 相当于同时使用了 Getter 、Setter 、RequiredArgsConstructor、ToString、EqualsAndHashCode 1、如何使用 需要同时使用Getter 、Setter 、RequiredArgsConstructor、ToString、EqualsAndHashCode注解一个Bean的时候。 2、代码示例 例&#xff1a; Data public cla…

CCC SPAKE2+流程解析

1、SPAKE2流程及SCP03通道介绍 SPAKE2流程发生在CCC车主配对过程中的Phase2。 SPAKE2流程为车辆和手机之间的数据交换建立了一个安全通道SCP03。 那这个SCP03通道是干啥的&#xff1f; 我们可以先简单的理解为&#xff1a;建立安全通道前&#xff0c;车辆和手机之间交互的AP…

剖解反转链表

剖解反转链表 思路&#xff1a; 1.若链表为空或者只存在一个节点&#xff0c;就无需反转&#xff0c;直接返回head 2.若存在多个节点 首先将head.next给到cur&#xff0c;并将head.next置为null 剩余的节点就利用头插法&#xff0c;反转链表 class Solution {public ListNo…

基于SpringBoot+Vue+MySQL的特色旅游网站系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着旅游业的蓬勃发展&#xff0c;人们对旅游体验的需求日益多样化与个性化。传统的旅游信息查询与预订方式已难以满足现代游客的需求。因此&#xff0c;我们开发了这款基于SpringBootVueMySQL的特色旅游网站系统。该系统旨在通…