当前位置: 首页 > news >正文

新网站怎么推广泉州北京网站建设

新网站怎么推广,泉州北京网站建设,做快消品看那些网站好,wordpress文章下载DAY 52 神经网络调参指南 知识点回顾#xff1a; 随机种子内参的初始化神经网络调参指南 参数的分类调参的顺序各部分参数的调整心得 作业#xff1a;对于day41的简单cnn#xff0c;看看是否可以借助调参指南进一步提高精度。 对于day41的CNN进行调参#xff1a; 早停类 随机种子内参的初始化神经网络调参指南 参数的分类调参的顺序各部分参数的调整心得 作业对于day41的简单cnn看看是否可以借助调参指南进一步提高精度。 对于day41的CNN进行调参 早停类 # 早停类 class EarlyStopping:如果验证损失在给定轮数内没有改善则提前停止训练def __init__(self, patience7, verboseFalse, delta0):参数:patience (int): 在最后一次验证损失改善后等待的轮数默认: 7verbose (bool): 如果为True每次验证损失改善时打印消息默认: Falsedelta (float): 监控指标的最小变化以视为改善默认: 0self.patience patienceself.verbose verboseself.counter 0 # 记录验证损失未改善的连续轮数self.best_score None # 记录历史最佳分数通常是负的验证损失因为我们希望最大化这个值self.early_stop False # 触发早停的标志self.val_loss_min np.Inf # 记录历史最低验证损失self.delta delta # 改善阈值def __call__(self, val_loss, model):score val_lossif self.best_score is None:self.best_score scoreself.save_checkpoint(val_loss, model)elif score self.best_score self.delta:self.counter 1print(f早停计数器: {self.counter} / {self.patience})if self.counter self.patience:self.early_stop Trueelse:self.best_score scoreself.save_checkpoint(val_loss, model)self.counter 0def save_checkpoint(self, val_loss, model):当验证损失降低时保存模型if self.verbose:print(f测试集损失降低 ({self.val_loss_min:.6f} -- {val_loss:.6f}))# torch.save(model.state_dict(), checkpoint.pth)self.val_loss_min val_loss 测试最大允许的 batch size 函数 def find_max_batch_size(train_dataset, device, model):max_batch_size 512try:train_loader DataLoader(train_dataset, batch_sizemax_batch_size, shuffleTrue)for data, target in train_loader:data, target data.to(device), target.to(device)output model(data)breakexcept RuntimeError as e:print(f最大 batch size 导致显存不足尝试减小)while True:max_batch_size // 2try:train_loader DataLoader(train_dataset, batch_sizemax_batch_size, shuffleTrue)for data, target in train_loader:data, target data.to(device), target.to(device)output model(data)print(f最大允许的 batch size 为 {max_batch_size})breakexcept RuntimeError:continuereturn max_batch_size 配置优化器和学习率调度器函数 # 配置优化器和学习率调度器函数 def configure_optimizer_scheduler(model):criterion nn.CrossEntropyLoss()# 设置 weight_decay 参数添加 L2 正则化optimizer optim.Adam(model.parameters(), lr0.001, weight_decay0.0001) scheduler ReduceLROnPlateau(optimizer, min, patience3, factor0.5)return criterion, optimizer, scheduler 完整代码 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pyplot as plt import numpy as np from torch.optim.lr_scheduler import ReduceLROnPlateau # 添加这行# 设置替代中文字体适用于Linux plt.rcParams[font.family] [WenQuanYi Micro Hei, sans-serif] plt.rcParams[axes.unicode_minus] False# 检查GPU是否可用 device torch.device(cuda if torch.cuda.is_available() else cpu) print(f使用设备: {device})# 1. 数据预处理 # 训练集使用多种数据增强方法提高模型泛化能力 train_transform transforms.Compose([# 随机裁剪图像从原图中随机截取32x32大小的区域transforms.RandomCrop(32, padding4),# 随机水平翻转图像概率0.5transforms.RandomHorizontalFlip(),# 随机颜色抖动亮度、对比度、饱和度和色调随机变化transforms.ColorJitter(brightness0.2, contrast0.2, saturation0.2, hue0.1),# 随机旋转图像最大角度15度transforms.RandomRotation(15),# 将PIL图像或numpy数组转换为张量transforms.ToTensor(),# 标准化处理每个通道的均值和标准差使数据分布更合理transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)) ])# 测试集仅进行必要的标准化保持数据原始特性标准化不损失数据信息可还原 test_transform transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)) ])# 2. 加载CIFAR-10数据集 train_dataset datasets.CIFAR10(root./cifar_data/cifar_data,trainTrue,downloadTrue,transformtrain_transform # 使用增强后的预处理 )test_dataset datasets.CIFAR10(root./cifar_data/cifar_data,trainFalse,transformtest_transform # 测试集不使用增强 )# 4. 定义CNN模型的定义替代原MLP class CNN(nn.Module):def __init__(self):super(CNN, self).__init__() # 继承父类初始化# ---------------------- 第一个卷积块 ----------------------# 卷积层1输入3通道RGB输出32个特征图卷积核3x3边缘填充1像素self.conv1 nn.Conv2d(in_channels3, # 输入通道数图像的RGB通道out_channels32, # 输出通道数生成32个新特征图kernel_size3, # 卷积核尺寸3x3像素padding1 # 边缘填充1像素保持输出尺寸与输入相同)# 批量归一化层对32个输出通道进行归一化加速训练self.bn1 nn.BatchNorm2d(num_features32)# ReLU激活函数引入非线性公式max(0, x)self.relu1 nn.ReLU()# 最大池化层窗口2x2步长2特征图尺寸减半32x32→16x16self.pool1 nn.MaxPool2d(kernel_size2, stride2) # stride默认等于kernel_size# ---------------------- 第二个卷积块 ----------------------# 卷积层2输入32通道来自conv1的输出输出64通道self.conv2 nn.Conv2d(in_channels32, # 输入通道数前一层的输出通道数out_channels64, # 输出通道数特征图数量翻倍kernel_size3, # 卷积核尺寸不变padding1 # 保持尺寸16x16→16x16卷积后→8x8池化后)self.bn2 nn.BatchNorm2d(num_features64)self.relu2 nn.ReLU()self.pool2 nn.MaxPool2d(kernel_size2) # 尺寸减半16x16→8x8# ---------------------- 第三个卷积块 ----------------------# 卷积层3输入64通道输出128通道self.conv3 nn.Conv2d(in_channels64, # 输入通道数前一层的输出通道数out_channels128, # 输出通道数特征图数量再次翻倍kernel_size3,padding1 # 保持尺寸8x8→8x8卷积后→4x4池化后)self.bn3 nn.BatchNorm2d(num_features128)self.relu3 nn.ReLU() # 复用激活函数对象节省内存self.pool3 nn.MaxPool2d(kernel_size2) # 尺寸减半8x8→4x4# ---------------------- 全连接层分类器 ----------------------# 计算展平后的特征维度128通道 × 4x4尺寸 128×162048维self.fc1 nn.Linear(in_features128 * 4 * 4, # 输入维度卷积层输出的特征数out_features512 # 输出维度隐藏层神经元数)# Dropout层训练时随机丢弃50%神经元防止过拟合self.dropout nn.Dropout(p0.5)# 输出层将512维特征映射到10个类别CIFAR-10的类别数self.fc2 nn.Linear(in_features512, out_features10)def forward(self, x):# 输入尺寸[batch_size, 3, 32, 32]batch_size批量大小3通道数32x32图像尺寸# ---------- 卷积块1处理 ----------x self.conv1(x) # 卷积后尺寸[batch_size, 32, 32, 32]padding1保持尺寸x self.bn1(x) # 批量归一化不改变尺寸x self.relu1(x) # 激活函数不改变尺寸x self.pool1(x) # 池化后尺寸[batch_size, 32, 16, 16]32→16是因为池化窗口2x2# ---------- 卷积块2处理 ----------x self.conv2(x) # 卷积后尺寸[batch_size, 64, 16, 16]padding1保持尺寸x self.bn2(x)x self.relu2(x)x self.pool2(x) # 池化后尺寸[batch_size, 64, 8, 8]# ---------- 卷积块3处理 ----------x self.conv3(x) # 卷积后尺寸[batch_size, 128, 8, 8]padding1保持尺寸x self.bn3(x)x self.relu3(x)x self.pool3(x) # 池化后尺寸[batch_size, 128, 4, 4]# ---------- 展平与全连接层 ----------# 将多维特征图展平为一维向量[batch_size, 128*4*4] [batch_size, 2048]x x.view(-1, 128 * 4 * 4) # -1自动计算批量维度保持批量大小不变x self.fc1(x) # 全连接层2048→512尺寸变为[batch_size, 512]x self.relu3(x) # 激活函数复用relu3与卷积块3共用x self.dropout(x) # Dropout随机丢弃神经元不改变尺寸x self.fc2(x) # 全连接层512→10尺寸变为[batch_size, 10]未激活直接输出logitsreturn x # 输出未经过Softmax的logits适用于交叉熵损失函数# 早停类 class EarlyStopping:如果验证损失在给定轮数内没有改善则提前停止训练def __init__(self, patience7, verboseFalse, delta0):参数:patience (int): 在最后一次验证损失改善后等待的轮数默认: 7verbose (bool): 如果为True每次验证损失改善时打印消息默认: Falsedelta (float): 监控指标的最小变化以视为改善默认: 0self.patience patienceself.verbose verboseself.counter 0 # 记录验证损失未改善的连续轮数self.best_score None # 记录历史最佳分数通常是负的验证损失因为我们希望最大化这个值self.early_stop False # 触发早停的标志self.val_loss_min np.Inf # 记录历史最低验证损失self.delta delta # 改善阈值def __call__(self, val_loss, model):score val_lossif self.best_score is None:self.best_score scoreself.save_checkpoint(val_loss, model)elif score self.best_score self.delta:self.counter 1print(f早停计数器: {self.counter} / {self.patience})if self.counter self.patience:self.early_stop Trueelse:self.best_score scoreself.save_checkpoint(val_loss, model)self.counter 0def save_checkpoint(self, val_loss, model):当验证损失降低时保存模型if self.verbose:print(f测试集损失降低 ({self.val_loss_min:.6f} -- {val_loss:.6f}))# torch.save(model.state_dict(), checkpoint.pth)self.val_loss_min val_loss# 2. 测试最大允许的 batch size 函数 def find_max_batch_size(train_dataset, device, model):max_batch_size 512try:train_loader DataLoader(train_dataset, batch_sizemax_batch_size, shuffleTrue)for data, target in train_loader:data, target data.to(device), target.to(device)output model(data)breakexcept RuntimeError as e:print(f最大 batch size 导致显存不足尝试减小)while True:max_batch_size // 2try:train_loader DataLoader(train_dataset, batch_sizemax_batch_size, shuffleTrue)for data, target in train_loader:data, target data.to(device), target.to(device)output model(data)print(f最大允许的 batch size 为 {max_batch_size})breakexcept RuntimeError:continuereturn max_batch_size# 配置优化器和学习率调度器函数 def configure_optimizer_scheduler(model):criterion nn.CrossEntropyLoss()# 设置 weight_decay 参数添加 L2 正则化optimizer optim.Adam(model.parameters(), lr0.001, weight_decay0.0001) scheduler ReduceLROnPlateau(optimizer, min, patience3, factor0.5)return criterion, optimizer, scheduler# 初始化模型 model CNN() model model.to(device) # 将模型移至GPU如果可用# 5. 训练模型记录每个 iteration 的损失 def train(model, train_dataset, test_dataset, device, epochs):model.train() # 设置为训练模式max_batch_size find_max_batch_size(train_dataset, device, model)criterion, optimizer, scheduler configure_optimizer_scheduler(model)early_stopping EarlyStopping(patience5, verboseTrue)train_loader DataLoader(train_dataset, batch_sizemax_batch_size, shuffleTrue)test_loader DataLoader(test_dataset, batch_sizemax_batch_size, shuffleFalse)# 记录每个 iteration 的损失all_iter_losses [] # 存储所有 batch 的损失iter_indices [] # 存储 iteration 序号# 记录每个 epoch 的准确率和损失train_acc_history []test_acc_history []train_loss_history []test_loss_history []for epoch in range(epochs):running_loss 0.0correct 0total 0for batch_idx, (data, target) in enumerate(train_loader):data, target data.to(device), target.to(device) # 移至GPUoptimizer.zero_grad() # 梯度清零output model(data) # 前向传播loss criterion(output, target) # 计算损失loss.backward() # 反向传播optimizer.step() # 更新参数# 记录当前 iteration 的损失iter_loss loss.item()all_iter_losses.append(iter_loss)iter_indices.append(epoch * len(train_loader) batch_idx 1)# 统计准确率和损失running_loss iter_loss_, predicted output.max(1)total target.size(0)correct predicted.eq(target).sum().item()# 每100个批次打印一次训练信息if (batch_idx 1) % 100 0:print(fEpoch: {epoch1}/{epochs} | Batch: {batch_idx1}/{len(train_loader)} f| 单Batch损失: {iter_loss:.4f} | 累计平均损失: {running_loss/(batch_idx1):.4f})# 计算当前epoch的平均训练损失和准确率epoch_train_loss running_loss / len(train_loader)epoch_train_acc 100. * correct / totaltrain_acc_history.append(epoch_train_acc)train_loss_history.append(epoch_train_loss)# 测试阶段model.eval() # 设置为评估模式test_loss 0correct_test 0total_test 0with torch.no_grad():for data, target in test_loader:data, target data.to(device), target.to(device)output model(data)test_loss criterion(output, target).item()_, predicted output.max(1)total_test target.size(0)correct_test predicted.eq(target).sum().item()epoch_test_loss test_loss / len(test_loader)epoch_test_acc 100. * correct_test / total_testtest_acc_history.append(epoch_test_acc)test_loss_history.append(epoch_test_loss)# 更新学习率调度器scheduler.step(epoch_test_loss)# 早停检查early_stopping(epoch_test_acc, model)if early_stopping.early_stop:print(早停触发停止训练。)breakprint(fEpoch {epoch1}/{epochs} 完成 | 训练准确率: {epoch_train_acc:.2f}% | 测试准确率: {epoch_test_acc:.2f}%)# 绘制所有 iteration 的损失曲线plot_iter_losses(all_iter_losses, iter_indices)# 绘制每个 epoch 的准确率和损失曲线plot_epoch_metrics(train_acc_history, test_acc_history, train_loss_history, test_loss_history)return epoch_test_acc # 返回最终测试准确率# 6. 绘制每个 iteration 的损失曲线 def plot_iter_losses(losses, indices):plt.figure(figsize(10, 4))plt.plot(indices, losses, b-, alpha0.7, labelIteration Loss)plt.xlabel(IterationBatch序号)plt.ylabel(损失值)plt.title(每个 Iteration 的训练损失)plt.legend()plt.grid(True)plt.tight_layout()plt.show()# 7. 绘制每个 epoch 的准确率和损失曲线 def plot_epoch_metrics(train_acc, test_acc, train_loss, test_loss):epochs range(1, len(train_acc) 1)plt.figure(figsize(12, 4))# 绘制准确率曲线plt.subplot(1, 2, 1)plt.plot(epochs, train_acc, b-, label训练准确率)plt.plot(epochs, test_acc, r-, label测试准确率)plt.xlabel(Epoch)plt.ylabel(准确率 (%))plt.title(训练和测试准确率)plt.legend()plt.grid(True)# 绘制损失曲线plt.subplot(1, 2, 2)plt.plot(epochs, train_loss, b-, label训练损失)plt.plot(epochs, test_loss, r-, label测试损失)plt.xlabel(Epoch)plt.ylabel(损失值)plt.title(训练和测试损失)plt.legend()plt.grid(True)plt.tight_layout()plt.show() # 8. 执行训练和测试 epochs 30 # 增加训练轮次以获得更好效果 print(开始使用CNN训练模型...) final_accuracy train(model, train_dataset, test_dataset, device, epochs) print(f训练完成最终测试准确率: {final_accuracy:.2f}%) 测试集准确率最好为80.44%跟day41相差不是很大
http://www.hkea.cn/news/14345092/

相关文章:

  • 苏州外贸网站推广wordpress 交易平台
  • asp.net网站第一次运行慢传统文化网站建设
  • 建站模板discover wordpress
  • 移动网站建设流程成都有实力的网站建设
  • 重庆有哪些做网站公司好wordpress timeline 修改
  • 网站标准宽度如何做微信小程序开发
  • 国外做游戏的视频网站wordpress 仿百度文库
  • 手机网站图片锚链接怎么做网络初始网站
  • 自动识别手机和电脑版本网站网页模板怎么下载
  • 企业网站作用12306网站是是阿里巴巴做的吗
  • 网站图标ico贵州企业网站
  • 网站设计名称做礼品公司网站的费用
  • 快递物流网站建设开发具备哪些功能廊坊网站搭建
  • 免费申请网站 主机 空间wordpress运行加速
  • 做彩票网站犯法吗长沙网站关键词排名
  • 网站推广途径和要点有哪些wordpress %s
  • 新开传奇网站企业网站哪家公司好
  • 网站建设v5star本地网站做通用会员卡
  • 企业网站管理系统设置网站建设网站结构图
  • 新吁网站建设免费论坛网站大全
  • 手机网站建设服务商全国工商网注册查询网
  • 专业网站制作推荐临漳 网站建设
  • 东莞社保官方网站个人网站要备案么
  • 微信官方网站建设百度网盘网站入口
  • 做网站答辩总结范文浪潮做网站建设吗
  • 自己ip做网站网站没有做301的后果是什么
  • 网站设计公司天津人和动物做的电影网站
  • 建设部网站查不到注册证怎么回事制作网页模板适应不同分辨率
  • 官方网站建设合同玉山电商网站建设
  • 网站建设论文500字万网域名查询官网