人工智能在教育上的应用1-基于pytorch框架下模型训练,用于数学题目图形的智能分类

news2024/11/23 11:25:31

大家好,今天给大家介绍一下人工智能在教育上的应用1-基于pytorch框架下模型训练,用于数学题目图形的智能分类,本文将利用CNN算法对数学题目中的图形进行自动分类和识别。这种应用可以帮助学生更好地理解和解决与数学相关的问题。基于CNN的数学题目图形智能分类功能,教育领域可以提供更智能化和个性化的学习辅助工具,提升学生对数学图形的识别和理解能力,改善学习效果。

文章目录

项目介绍
一、前期工作
1.导入库
2. 数据集加载
二、构建CNN模型
三、训练模型函数
四、训练模型与结果
五、总结

项目介绍

利用CNN算法对数学题目中的图形进行自动分类,主要步骤:

1.数据收集:首先,需要收集大量的数学题目图形数据作为训练集。这些数据可以包括各种数学题目中常见的图形,例如三角形、正方形、圆形、抛物线等。

2.数据预处理:在数据收集后,需要对图形进行预处理。这包括将图像转换为数字矩阵表示,并进行标准化和缩放,以便输入CNN模型进行处理。

3.CNN模型设计:接下来,需要设计CNN模型用于图形分类。CNN由多个卷积层、池化层和全连接层组成。卷积层用于提取图像的特征,池化层用于降低特征图的维度,全连接层用于将提取的特征映射到具体的类别上。

4.模型训练:使用预处理后的数据集,将其分为训练集和验证集,然后使用训练集对CNN模型进行训练。在训练过程中,通过反向传播算法不断调整模型参数,使其能够更准确地分类数学题目图形。

5.模型评估:训练完成后,使用验证集对模型进行评估。评估指标可以包括准确率、精确率、召回率等。根据评估结果,可以进一步优化模型的结构和参数。

6.模型应用:经过训练和评估的CNN模型可以用于实际的数学题目图形智能分类。当学生提交数学题目时,系统可以自动提取其中的图形,并利用已训练好的模型对图形进行分类,从而帮助学生更好地理解问题并给出正确的答案。

一、前期工作

1.导入库

import torch
from torchvision import datasets, transforms, models
from torch.utils.data import DataLoader
import random

2. 数据集加载

以下操作我将利用函数来进行数据集的划分,分为训练集和验证集,将数据转换成Tensor格式,然后利用DataLoader加载数据

数据集下载地址 :链接:https://pan.baidu.com/s/1hI891lQ6gbiCdq5iVZkelw?pwd=uabv
提取码:uabv

# 设置随机数种子
random.seed(42)

# 定义验证集的比例(可以根据需求自行设置)
val_ratio = 0.2

data_dir = "data"

# 定义图像转换
train_transforms = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])

# 使用ImageFolder加载数据集
train_dataset = datasets.ImageFolder(data_dir, transform=train_transforms)

# 计算划分后的大小
dataset_size = len(train_dataset)
val_size = int(dataset_size * val_ratio)
train_size = dataset_size - val_size

# 使用random_split函数进行划分
train_dataset, val_dataset = torch.utils.data.random_split(train_dataset, [train_size, val_size])

# 使用图像数据集和转换定义dataloaders
train_loader = DataLoader(train_dataset, batch_size=10, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=10)

二、构建DenseNet模型

# 加载预训练的densenet121模型
model = models.densenet121(pretrained=True)

criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

三、训练模型函数

num_epochs = 10
for epoch in range(num_epochs):
    running_loss = 0.0
    correct = 0
    total = 0

    for i, (images, labels) in enumerate(train_loader):
        images = images.to(device)
        labels = labels.to(device)

        optimizer.zero_grad()

        outputs = model(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        running_loss += loss.item()
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

        if (i+1) % 10 == 0:  # 每10个批次打印一次训练信息
            print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}, Accuracy: {:.2f}%'
                  .format(epoch+1, num_epochs, i+1, len(train_loader),
                          running_loss/10, (correct/total)*100))
            running_loss = 0.0

    # 在每个训练周期结束后计算验证集上的准确率
    model.eval()
    val_correct = 0
    val_total = 0

    with torch.no_grad():
        for images, labels in val_loader:
            images = images.to(device)
            labels = labels.to(device)

            outputs = model(images)
            _, val_predicted = torch.max(outputs.data, 1)

            val_total += labels.size(0)
            val_correct += (val_predicted == labels).sum().item()

    val_accuracy = (val_correct / val_total) * 100
    print('Epoch [{}/{}], Validation Accuracy: {:.2f}%'
          .format(epoch+1, num_epochs, val_accuracy))

    model.train()

图形识别训练数集里面共有4类:circular(圆形),parabola(抛物线),square(正方形),triangle(三角形)
在这里插入图片描述triangle(三角形)
在这里插入图片描述square(正方形)
在这里插入图片描述

四、训练模型与结果

Epoch [1/10], Step [10/20], Loss: 7.5273, Accuracy: 5.00%
Epoch [1/10], Step [20/20], Loss: 1.6058, Accuracy: 34.69%
Epoch [1/10], Validation Accuracy: 85.71%
Epoch [2/10], Step [10/20], Loss: 0.2691, Accuracy: 88.00%
Epoch [2/10], Step [20/20], Loss: 0.2711, Accuracy: 89.29%
Epoch [2/10], Validation Accuracy: 93.88%
Epoch [3/10], Step [10/20], Loss: 0.0364, Accuracy: 98.00%
Epoch [3/10], Step [20/20], Loss: 0.1827, Accuracy: 95.92%
Epoch [3/10], Validation Accuracy: 93.88%
Epoch [4/10], Step [10/20], Loss: 0.0616, Accuracy: 98.00%
Epoch [4/10], Step [20/20], Loss: 0.1900, Accuracy: 96.43%
Epoch [4/10], Validation Accuracy: 93.88%
Epoch [5/10], Step [10/20], Loss: 0.0877, Accuracy: 99.00%
Epoch [5/10], Step [20/20], Loss: 0.0481, Accuracy: 98.98%
Epoch [5/10], Validation Accuracy: 93.88%
Epoch [6/10], Step [10/20], Loss: 0.1381, Accuracy: 98.00%
Epoch [6/10], Step [20/20], Loss: 0.0590, Accuracy: 97.45%
Epoch [6/10], Validation Accuracy: 93.88%
Epoch [7/10], Step [10/20], Loss: 0.0234, Accuracy: 99.00%
Epoch [7/10], Step [20/20], Loss: 0.0865, Accuracy: 98.47%
Epoch [7/10], Validation Accuracy: 97.96%
Epoch [8/10], Step [10/20], Loss: 0.0303, Accuracy: 99.00%
Epoch [8/10], Step [20/20], Loss: 0.0073, Accuracy: 99.49%
Epoch [8/10], Validation Accuracy: 97.96%
Epoch [9/10], Step [10/20], Loss: 0.0254, Accuracy: 100.00%
Epoch [9/10], Step [20/20], Loss: 0.0191, Accuracy: 100.00%
Epoch [9/10], Validation Accuracy: 97.96%
Epoch [10/10], Step [10/20], Loss: 0.0116, Accuracy: 100.00%
Epoch [10/10], Step [20/20], Loss: 0.0337, Accuracy: 99.49%
Epoch [10/10], Validation Accuracy: 97.96%

测试和验证结果准确率图:
在这里插入图片描述
迭代10次后,训练集准确率高达99.49%,验证集准确率高达97.96%。

五、总结

本文介绍了在教育领域中应用人工智能的一个实例,即基于PyTorch框架下使用CNN算法对数学题目中的图形进行智能分类和识别。通过这种应用,可以帮助学生更好地理解和解决与数学相关的问题。

总结思路:

应用背景:介绍了人工智能在教育领域上的应用,以及如何利用智能分类和识别图形来提升学生的学习效果。

基于PyTorch框架的模型训练:提到使用PyTorch框架来构建和训练CNN模型,以实现对数学题目中图形的自动分类和识别。

功能介绍:说明了基于CNN的数学题目图形智能分类功能的优势,如提供智能化和个性化的学习辅助工具,帮助学生提升对数学图形的识别和理解能力。

效果提升:强调该应用的潜在价值,可以改善学生的学习效果,并提高他们对数学图形的认知水平。

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

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

相关文章

C++平衡搜索二叉树(AVL)

一、定义 AVL树本质上还是一棵二叉搜索树,它的特点是: 1.本身首先是一棵二叉搜索树。 2.带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。 搜索二叉树可能出现单边树的情况,导致…

JavaWeb 速通HTTP

目录 一、HTTP快速入门 1.HTTP简介 : 2.HTTP请求头 : 3.HTTP响应头 : 二、HTTP响应状态码 1.基本介绍 : 2.常见状态码 : 3.状态码的分类 : 4.完整状态码汇总 : 三、HTTP请求包和响应包 1.请求包分析 : 1 GET请求 (1) 说明 (2) doGet返回数据给浏览器 (3) form表单提…

网络安全合规与标准的主要发展方向

网络安全合规就是避免违反网络安全有关的法律、法规、规章、合同义务以及任何安全要求,标准在网络安全合规工作中扮演着重要的角色。 一、标准在网络安全合规体系中的地位作用 网络安全合规体系包括网络安全有关的法律、法规、规章、其他规范性文件、及合同义务等…

JavaWeb课程设计项目实战(07)——项目编码实践4

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 在本节教程中,我们实现删除学生的功能。当在学生列表中点击删除后即可删除某位学生并重新加载学生列表。所以,该操作实际包含两步: 1、删…

Java虚拟机——虚拟机字节码执行引擎 运行时栈帧结构

1 虚拟机字节码执行引擎 执行引擎是Java虚拟机核心的组成部分之一。"虚拟机"是一个相对于"物理机"的概念,这两种机器都有代码执行的能力,物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的。而虚拟机的执行引擎…

unity 调用c++ dll同时将unity的值传给c++

最近因为项目的需要,实现了将C工程生成dll在unity中调用,但同时发现如果能让unity中值实时的传给c则就完美了,而不只是把c计算的结果给unity。 通过验证是可行的。 C 生成dll导出关键部分 // SPDX-License-Identifier: MIT // Copyright (c…

单Bank OTA升级:STM32G071 BootLoader (一)

什么是单Bank升级:将Flash划分为以下3个区域。 BootLoader区:程序进行升级的引导程序,根据Upade_Flag来判断跳转Bank区运行程序或是接收升级数据写入Bank,接收完成后擦写Upade_Flag区,进行跳转Bank区运行程序。 Upad…

无线投屏手机(安卓)屏幕到 Linux(ubuntu 22.04)桌面

1.安装 scrcpy 安装 scrcpy会自动安装 adb. 这个版本的adb功能不是最全的,需要删掉,然后从链接 https://dl.google.com/android/repository/platform-tools-latest-darwin.zip 下载,解压安装即可。 2. 在手机上 打开开发者模式和 USB调试…

Git Merge和Rebase

◆ 前言 Git作为我们日常开发代码的版本管理,开发分支的管理方面起着很大作用,我们开发过程中分支通常有生产、预发、测试、开发这几个分支,我们会根据项目进行的某个阶段,将代码提交到某个版本上,正常流程是先开发 —…

【并发专题】阻塞队列BlockingQueue实战及其原理分析

目录 前置知识队列有界队列、无界队列Queue——队列在JAVA里面的接口 阻塞队列介绍BlockingQueue——阻塞队列在JAVA里面的接口阻塞队列的应用场景JUC包下的阻塞队列 课程内容*一、ArrayBlockingQueue基本介绍应用场景使用示例基本原理数据结构核心源码解析双指针与环形数组 *二…

设计模式:创建型模式

抽象工厂 abstract factory 例子 考虑一个多风格的界面应用,要求可以切换不同风格类型的组件(窗口,滚动条,按钮等) 风格/组件pm风格motif风格滚动条pmScrollBarmotifScrollBar窗口pmWindowMotifWindow WidgetFact…

Vue中TodoList案例_静态

MyHeader.vue <template><div class"todo-header"><input type"text" placeholder"请输入你的任务名称&#xff0c;按回车键确认"></div> </template><script> export default {name: "MyHeader"…

16. python从入门到精通——Python网络爬虫

目录 什么是爬虫 优点 网络爬虫的常用技术 网络请求&#xff1a;有三个常用网络请求模块 Urllib模块&#xff1a;python原生系统中标准库模块 urllib中的子模块 urllib.parse.urlencode() 常用于进行 URL 的 get 请求参数拼接 Urllib3模块&#xff1a;Urllib模块的升级版…

paramiko模块使用(2)

远程查看服务器资源使用情况 单机实现 import paramiko# 定义远程服务器的连接信息 hostname 192.168.2.198 username root password 123456# 创建SSH客户端对象 client paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy())try:# 连接到…

力扣刷题SQL-197. 上升的温度---分步解题

表&#xff1a; Weather ------------------------ | Column Name | Type | ------------------------ | id | int | | recordDate | date | | temperature | int | ------------------------ id 是这个表的主键 该表包含特定日期的温度信息编…

qemu搭建arm环境以及文件共享

几乎完全参照该文章 使用QEMU搭建ARM64实验环境 - 简书 ubuntu 14.04&#xff0c;linux3.16&#xff0c; busybox-1.31.0 arm-linux-gnueabi-gcc -v linux3.16以及busybox下载安装可参考链接 Ubuntu14.04安装qemu&#xff0c;运行linux-3.16gdb调试_qemu 安装 ubuntu 14_这个我…

项目开启启动命令整合

启动RabbitMQ管理插件 1.启动 RabbitMQ 管理插件。 rabbitmq-plugins enable rabbitmq_management rabbitmq-server # 直接启动&#xff0c;如果关闭窗⼝或需要在该窗⼝使⽤其他命令时应⽤就会停⽌ rabbitmq-server -detached # 后台启动 rabbitmq-server start # 启⽤服务 rab…

【亲测可用】安装Qt提示“无法下载存档 http://download.qt.io/online/qtsdkrepository...“

下载Qt安装程序exe之后&#xff0c;一般直接双击运行然后&#xff0c;注册登录后&#xff0c;到了第三步【安装程序】时&#xff0c;进行远程检索文件总会卡在这里&#xff0c;无法进行到下一步。报错如下&#xff1a; 解决办法&#xff1a; 关闭安装程序&#xff0c;然后&…

一百三十二、ClickHouse——ClickHouse建表时默认字段非空导致数据问题

一、ClickHouse建表问题 由于ClickHouse建表时默认字段非空 &#xff08;一&#xff09;建表语句 &#xff08;二&#xff09;查看字段属性 ClickHouse建表时一般情况下直接默认字段非空 &#xff08;三&#xff09;导致问题 所以这就导致一般情况下&#xff0c;一些字段的…

iphone新机官网验机流程

苹果官网验机流程 进入苹果官网&#xff0c;找到技术支持&#xff0c;进入“查看保障服务和支持期限“页面&#xff0c;输入要查询的机器的序列号&#xff0c;就可以查询了。 苹果官网验机入口&#xff1a;https://checkcoverage.apple.com/ 输入iphone序列号进行验机&#xff…