大家好,今天给大家介绍一下人工智能在教育上的应用1-基于pytorch框架下模型训练,用于数学题目图形的智能分类,本文将利用CNN算法对数学题目中的图形进行自动分类和识别。这种应用可以帮助学生更好地理解和解决与数学相关的问题。基于CNN的数学题目图形智能分类功能,教育领域可以提供更智能化和个性化的学习辅助工具,提升学生对数学图形的识别和理解能力,改善学习效果。
项目介绍
一、前期工作
1.导入库
2. 数据集加载
二、构建CNN模型
三、训练模型函数
四、训练模型与结果
五、总结
利用CNN算法对数学题目中的图形进行自动分类,主要步骤:
1.数据收集:首先,需要收集大量的数学题目图形数据作为训练集。这些数据可以包括各种数学题目中常见的图形,例如三角形、正方形、圆形、抛物线等。
2.数据预处理:在数据收集后,需要对图形进行预处理。这包括将图像转换为数字矩阵表示,并进行标准化和缩放,以便输入CNN模型进行处理。
3.CNN模型设计:接下来,需要设计CNN模型用于图形分类。CNN由多个卷积层、池化层和全连接层组成。卷积层用于提取图像的特征,池化层用于降低特征图的维度,全连接层用于将提取的特征映射到具体的类别上。
4.模型训练:使用预处理后的数据集,将其分为训练集和验证集,然后使用训练集对CNN模型进行训练。在训练过程中,通过反向传播算法不断调整模型参数,使其能够更准确地分类数学题目图形。
5.模型评估:训练完成后,使用验证集对模型进行评估。评估指标可以包括准确率、精确率、召回率等。根据评估结果,可以进一步优化模型的结构和参数。
6.模型应用:经过训练和评估的CNN模型可以用于实际的数学题目图形智能分类。当学生提交数学题目时,系统可以自动提取其中的图形,并利用已训练好的模型对图形进行分类,从而帮助学生更好地理解问题并给出正确的答案。
import torch
from torchvision import datasets, transforms, models
from torch.utils.data import DataLoader
import random
以下操作我将利用函数来进行数据集的划分,分为训练集和验证集,将数据转换成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)
# 加载预训练的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的数学题目图形智能分类功能的优势,如提供智能化和个性化的学习辅助工具,帮助学生提升对数学图形的识别和理解能力。
效果提升:强调该应用的潜在价值,可以改善学生的学习效果,并提高他们对数学图形的认知水平。