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

下载软件的网站推荐郴州网站运营公司

下载软件的网站推荐,郴州网站运营公司,建设工程质量协会网站,谁可以帮我做网站迁移学习 标题1.什么是迁移学习 迁移学习(Transfer Learning)是一种机器学习方法#xff0c;就是把为任务 A 开发 的模型作为初始点#xff0c;重新使用在为任务 B 开发模型的过程中。迁移学习是通过 从已学习的相关任务中转移知识来改进学习的新任务#xff0c;虽然大多数…迁移学习 标题1.什么是迁移学习 迁移学习(Transfer Learning)是一种机器学习方法就是把为任务 A 开发 的模型作为初始点重新使用在为任务 B 开发模型的过程中。迁移学习是通过 从已学习的相关任务中转移知识来改进学习的新任务虽然大多数机器学习算 法都是为了解决单个任务而设计的但是促进迁移学习的算法的开发是机器学 习社区持续关注的话题。 迁移学习对人类来说很常见例如我们可能会发现 学习识别苹果可能有助于识别梨或者学习弹奏电子琴可能有助于学习钢琴。 找到目标问题的相似性迁移学习任务就是从相似性出发将旧领域 (domain)学习过的模型应用在新领域上 标题2.迁移学习的步骤 1、选择预训练的模型和适当的层 通常我们会选择在大规模图像数据集如ImageNet上预训练的模型如VGG、ResNet等。然后根据新数据集的特点选择需要微调的模型层。对于低级特征的任务如边缘检测最好使用浅层模型的层而对于高级特征的任务如分类则应选择更深层次的模型。 2、冻结预训练模型的参数 保持预训练模型的权重不变只训练新增加的层或者微调一些层避免因为在数据集中过拟合导致预训练模型过度拟合。 3、在新数据集上训练新增加的层 在冻结预训练模型的参数情况下训练新增加的层。这样可以使新模型适应新的任务从而获得更高的性能。 4、微调预训练模型的层 在新层上进行训练后可以解冻一些已经训练过的层并且将它们作为微调的目标。这样做可以提高模型在新数据集上的性能。 5、评估和测试 在训练完成之后使用测试集对模型进行评估。如果模型的性能仍然不够好可以尝试调整超参数或者更改微调层。 标题3.迁移学习实例 该实例使用的模型是ResNet-18残差神经网络模型 ###1. 导入必要的库 在import torch import torchvision.models as models from torch import nn from torch.utils.data import Dataset,DataLoader from torchvision import transforms from PIL import Image import numpy as np 这里导入了后续代码会用到的库具体如下 torchPyTorch 深度学习框架的核心库。 torchvision.models包含了预训练的模型这里会用到 ResNet-18。 torch.nn用于构建神经网络的模块。 torch.utils.data.Dataset 和 torch.utils.data.DataLoader用于自定义数据集和加载数据。 torchvision.transforms用于图像的预处理。 PIL.Image用于读取图像。 numpy用于数值计算。 ###2. 加载预训练模型并修改全连接层 resnet_model models.resnet18(weightsmodels.ResNet18_Weights.DEFAULT) for param in resnet_model.parameters():print(param)param.requires_gradFalse in_featuresresnet_model.fc.in_features resnet_model.fcnn.Linear(in_features,20) params_to_update[] for param in resnet_model.parameters():if param.requires_gradTrue:params_to_update.append(param)加载预训练的 ResNet-18 模型。 把模型中所有参数的 requires_grad 设置为 False也就是冻结这些参数使其在训练时不更新。 获取原模型全连接层的输入特征数然后将全连接层替换为一个新的全连接层输出维度为 20。 收集所有 requires_grad 为 True 的参数这些参数会在训练时更新。 ###3. 定义图像预处理变换 data_transforms {train:transforms.Compose([transforms.Resize([300,300]),transforms.RandomRotation(45),transforms.CenterCrop(224),transforms.RandomHorizontalFlip(p0.5),transforms.RandomVerticalFlip(p0.5),transforms.RandomGrayscale(p0.1),transforms.ToTensor(),transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])]),valid:transforms.Compose([transforms.Resize([224,224]),transforms.ToTensor(),transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]), }定义了两个图像预处理的组合变换分别用于训练集和验证集。 训练集的变换包含了数据增强操作像随机旋转、水平翻转、垂直翻转等。 验证集的变换只包含了调整大小、转换为张量和标准化操作。 4. 自定义数据集类 class food_dataset(Dataset):def __init__(self,file_path,transformNone):self.file_path file_pathself.imgs []self.labels []self.transform transformwith open(self.file_path) as f:samples [x.strip().split( ) for x in f.readlines()]for img_path,label in samples:self.imgs.append(img_path)self.labels.append(label)def __len__(self):return len(self.imgs)def __getitem__(self, idx):image Image.open(self.imgs[idx])if self.transform:image self.transform(image)label self.labels[idx]label torch.from_numpy(np.array(label,dtypenp.int64))return image,label自定义了一个 food_dataset 类继承自 torch.utils.data.Dataset。 init 方法解析包含图像路径和标签的文本文件把图像路径和标签分别存到 self.imgs 和 self.labels 中。 len 方法返回数据集的大小。 getitem 方法根据索引读取图像对图像进行预处理将标签转换为张量然后返回图像和标签。 5. 创建数据集和数据加载器 training_data food_dataset(file_path./trainbig.txt,transformdata_transforms[train]) test_data food_dataset(file_path./testbig.txt,transformdata_transforms[valid]) train_dataloader DataLoader(training_data,batch_size64,shuffleTrue) test_dataloader DataLoader(test_data,batch_size64,shuffleTrue)创建训练集和测试集的数据集对象。 创建训练集和测试集的数据加载器设置批量大小为 64并且打乱数据 ###6. 配置训练设备、损失函数、优化器和学习率调度器 device cuda if torch.cuda.is_available() else mps if torch.backends.mps.is_available() else cpu print(fUsing {device} device) modelresnet_model.to(device) loss_fn nn.CrossEntropyLoss() optimizer torch.optim.Adam(params_to_update,lr0.001) schedulertorch.optim.lr_scheduler.StepLR(optimizer,step_size5,gamma0.5)选择合适的训练设备GPU 或 CPU。 把模型移动到所选设备上。 定义交叉熵损失函数。 定义 Adam 优化器只对之前收集的需要更新的参数进行优化。 定义学习率调度器每 5 个 epoch 将学习率乘以 0.5。 ###7. 定义训练和测试函数 def train(dataloader,model,loss_fn,optimizer):model.train()batch_size_num 1for X,y in dataloader:X,y X.to(device),y.to(device)pred model.forward(X)loss loss_fn(pred,y)optimizer.zero_grad()loss.backward()optimizer.step()def test(dataloader, model,loss_fn):global best_accsize len(dataloader.dataset)num_batches len(dataloader)model.eval()test_loss,correct 0,0with torch.no_grad():for X, y in dataloader:X,y X.to(device),y.to(device)pred model.forward(X)test_lossloss_fn(pred,y).item()correct (pred.argmax(1) y).type(torch.float).sum().item()test_loss / num_batchescorrect / sizeprint(fTest result:\n Accuracy:{(100 * correct)}%, Avg loss: {test_loss})acc_s.append(correct)loss_s.append(test_loss)if correctbest_acc:best_acccorrecttrain 函数将模型设置为训练模式遍历训练数据加载器计算损失反向传播并更新模型参数。 test 函数将模型设置为评估模式遍历测试数据加载器计算测试集的准确率和平均损失记录最佳准确率。 8. 训练模型并保存 epochs 20 acc_s [] loss_s [] for t in range(epochs):print(fEpoch {t 1}\n-----------)train(train_dataloader, model,loss_fn, optimizer)scheduler.step()test(test_dataloader,model,loss_fn) print(最优训练结果为,best_acc) torch.save(model.state_dict(), food_classification_model.pt)训练模型 20 个 epoch。 每个 epoch 结束后更新学习率并进行测试。 打印最优训练结果。 保存模型的参数到 food_classification_model.pt 文件中。
http://www.zqtcl.cn/news/620863/

相关文章:

  • 做网站树立品牌形象建设了网站后怎么用谷歌引流
  • 专业公司网站建设建设人才库网站
  • 怎么自己做直播网站吗手机免费建站app
  • 惠州规划建设局网站seo网站关键词排名优化公司
  • 关键词检测百度seo一本通
  • 做效果图的外包网站徐州低价seo
  • xp系统中做网站服务器吗网站设计版权
  • 化妆品网站建设经济可行性分析怎么做好网站
  • 软件企业网站建设栏目结构图服务公司有哪些
  • 郑州专业做淘宝网站推广哪些公司需要网站开发工程师
  • 如何为企业做网站单页网站推广
  • 做公众号封面图的网站凡客精选app
  • 张家界做旅游网站网业小说畅读服务
  • 短租网站那家做的好网络设计工作好找吗
  • 企业建网站哪家好网络书签 wordpress
  • 网站策划的工作职责有关网站开发的创意
  • 上国外网站dns如何免费做网站推广
  • wordpress导航站的源码网页设计与制作微课教程第4版李敏
  • 建站的好公司wordpress 小工具 调用
  • 郑州高考网站建设wordpress调用多个底部
  • 在线做爰直播网站dw制作网页步骤
  • 视频网站 php源码深圳高端网站建设招聘
  • 企业网站服务费怎么做记账凭证那个网站上有打码的任务做
  • 沈阳做网站优化的公司长春网络建站模板
  • 秒收网站鞍山58同城
  • 模板网站建设方案wordpress系统在线升级
  • 男女做爰视频网站在线视频seo也成搜索引擎优化
  • 网站优化和网站推广深圳市高端网站建设
  • 宁波网站建设优化企业推荐四川省建设厅新网站
  • 哈尔滨模板自助建站优秀的电子商务网站