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

大家好,今天给大家介绍一下人工智能在教育上的应用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的数学题目图形智能分类功能的优势,如提供智能化和个性化的学习辅助工具,帮助学生提升对数学图形的识别和理解能力。

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

猜你喜欢

转载自blog.csdn.net/weixin_42878111/article/details/131832615