深度学习之图像识别|“朝闻道”知识分享大赛
这是我参加“朝闻道”知识分享大赛的第6篇文章
基于卷积神经网络的图像识别
收集狗、鼠、兔、鸡四类图像,并微调resnet18或者其他网络进行微调,达到对上述四种类别图像的分类,其他图像归并为第5类
模型代码:
import torch.nn as nn
from torchvision.models import resnet18
class CustomResNet18(nn.Module):
def __init__(self, num_classes=5):
super(CustomResNet18, self).__init__()
self.model = resnet18(pretrained=True)
self.model.fc = nn.Sequential(
nn.Dropout(0.2),
nn.Linear(512, num_classes),
)
def forward(self, x):
return self.model(x)
resnet18网络拓扑图

ResNet18作为基础网络进行微调。微调是一种有效的迁移学习手段,可以节省训练时间并提高模型性能。通过清洗数据集,移除噪声和错误标签的样本,模型的性能有了显著提升。
训练集代码:
# 数据预处理和数据增强
transform = transforms.Compose([
# transforms.RandomResizedCrop(224), # 随机裁剪并缩放到224x224
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # 归一化
])
# 数据加载
train_dataset = datasets.ImageFolder('训练集', transform=transform)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_dataset = datasets.ImageFolder('测试集', transform=transform)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)
num_classes = len(train_dataset.classes)
model = CustomResNet18(num_classes).to(device)
loss_fun = torch.nn.CrossEntropyLoss() # 交叉熵损失函数,适用于多分类问题
optimizer = optim.Adam(model.parameters(), lr=0.0001, weight_decay=0.05)
# 训练模型
num_epochs = 20
best_loss = float("inf")
for epoch in range(num_epochs):
model.train() # 设置模型为训练模式
running_loss = 0.0
correct = 0
total = 0
for images, labels in train_loader:
images, labels = images.to(device), labels.to(device)
outputs = model(images)
loss = loss_fun(outputs, labels)
optimizer.zero_grad() # 清除梯度
loss.backward() # 反向传播
optimizer.step() # 更新参数
running_loss += loss.item()
predicted = torch.max(outputs, 1)[1]
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f"Epoch [{epoch + 1}/{num_epochs}], Loss: {running_loss / len(train_loader):.4f}")
model.eval()
test_loss = 0.0
test_correct = 0
test_total = 0
for images_test, labels_test in test_loader:
images1, labels1 = images_test.to(device), labels_test.to(device)
outputs_test = model(images1)
correct_loss = loss_fun(outputs_test, labels1)
test_loss += correct_loss.item()
predicted = torch.max(outputs_test, 1)[1]
test_total += labels1.size(0)
test_correct += (predicted == labels1).sum().item()
if test_loss<best_loss:
best_loss=test_loss
print(f" Loss: {best_loss / len(test_loader):.4f}, Accuracy: {100 * test_correct / test_total: .2f}%")
# 保存模型
torch.save(model, r" \logs\imagefolder.pth")
相关推荐
关于AI开发方法论-以文档为索引的高质量协作开发:让一次现象描述精准命中几个代码块
对AI的编码规范进行约束
2026学年第二学期彩色校历(excel+pdf)
2026学年第二学期彩色校历(excel+pdf)
在奔跑中换芯:Java热部署的JVM边界、类加载器扩展与框架级重载全景代码包
运行命令:bash code/hotswap-lab/build_and_run.sh。脚本优先使用 JAVA_HOME,未设置时用 /usr/libexec/java_home -v 1.8 查找 JDK 8,然后依次运行实验一 RedefineMatrix(带 -javaagent 启动)、实验二 AttachDriver、实验三 ClassLoaderPrependLab、实验四 BeanReloadSim、实验五 ChangeBatchPlanner、实验六 DevLoopCostModel,完整输出保存在 code/run_output.txt。
产业园区运营负责人如何高效识别高价值科技成果?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
基于蒙特卡洛,copula函数,fuzzy-kmeans获取6个典型场景进行随机优化多类型电动汽车采用分时电价调度,考虑上级电网出力、峰谷差惩罚费用、风光调度、电动汽车负荷调度费用和网损费用
内容概要:本文围绕基于蒙特卡洛法和Copula函数生成多类型电动汽车充电负荷与风光出力的原始场景,并采用模糊C均值(fuzzy-kmeans)或k-means等聚类算法对海量场景进行削减,提取出6个具有代表性的典型场景,以降低随机优化模型的计算复杂度。在此基础上,构建考虑分时电价机制的多目标随机优化调度模型,综合考量上级电网购电成本、峰谷差惩罚费用、风光发电调度收益、电动汽车负荷调度费用及电网网损费用等多重因素,旨在实现电动汽车集群的有序充放电管理。研究通过Matlab平台进行算法实现与仿真验证,有效解决了高比例可再生能源接入背景下电动汽车无序充电引发的电网峰谷差加剧问题,提升了系统运行经济性、新能源消纳能力与电网稳定性。; 适合人群:具备电力系统分析、运筹学优化及智能电网相关背景的研究生、科研人员,以及从事电动汽车调度、需求侧响应、综合能源系统优化等相关领域的工程师和技术人员。; 使用场景及目标:① 学习并掌握利用场景生成与削减技术(如蒙特卡洛、Copula、k-means)处理电力系统中源荷双重不确定性问题的方法;② 构建并求解计及多重成本因素的电动汽车集群优化调度模型,为电力公司制定分时电价策略和电动汽车聚合商设计调度方案提供理论依据;③ 深入理解模糊C均值聚类在典型场景提取中的应用流程及其对优化效率的提升作用。; 阅读建议:建议读者重点研读场景生成与削减的具体步骤、多目标优化模型的数学建模过程(尤其是各成本项的量化表达),并结合提供的Matlab代码进行仿真复现,通过调整聚类数量、分时电价参数等变量观察对调度结果的影响,以深化对模型机理的理解。


