2 任务2: 使用趋动云GPU进行猫狗识别实践

使用趋动云提供的免费GPU,进行猫狗识别实践。
虽然例程里面提供的是基于tensorflow的,但是你也可以使用pytorch的代码
使用这个平台的一个优点就是方便,各种环境等等应有尽有;还有一些常见的数据集。

1 创建项目

1.进入趋动云用户工作台,在当前空间处选择注册时系统自动生成的空间(其他空间无免费算力);
image.png
2.填写项日名称及项目描述,如图二所示:
image.png
3.添加镜像:选择含TensorFlow2.X框架的官方镜像即可,如图三所示;
image.png
4.添加绑定数据集:选择公开数据集,DogsVsCats。
image.png
5.其余无需填写,点击右下角创建,系统弹出上传代码的提示,单击暂不上传,项目创建成功。

2 初始化开发环境

1,下载代码:
飞书文档连接:到第三章step1下载:
https://nuly9zxzf1.feishu.cn/docx/HOmzdmST9oc43gxjTF0c7PAAnnb

2,初始化开发环境:
图四:单击右上角的运行代码,进入初始化开发环境页;
图五:填写开发环境的初始化配置;
image.png

image.png

image.png

image.png

3 调试代码

开发环境创建好后,您可在开发环境中调试代码。
1.单击开发环境实例页右侧的JupyterLab工具。
2.默认进入/gemini/目录下,在右侧目录树中单击code文件夹,进入到/gemini/code/目录下。
image.png

image.png

3.单击顶部网页终端按钮,进入终端界面。
image.png

4.在网页终端运行如下代码
运行:

python $GEMINI_RUN/DogsVsCats.py --num_epochs 5 --data_dir $GEMINI_DATA_IN1/DogsVsCats/ --train_dir $GEMINI_DATA_OUT

系统返回一系列信息,直到返回test accuracy信息,如下所示,表明该模型测试结束,其识别猫狗的能力为
0.500000,即几乎无识别能力.

5.单击JupyterLab,切换回JupyterLab工具,分析/gemini/code/路径下的模型代码。
经排查,发现代码中没有打乱数据集进行训川练,导致模型没有训练成功。这是因为模型在一个batch.之中,只曰
能看到猫的类别和狗的类别,这样看不到另一个类别的信息,所以没有任何识别能力。

6.修改模型代码并保存。
a.双击/gemini/code/路径下的DogsVsCats.py,开始编辑该文件。
b.删除该文件中第44行的注释符号#。
c,保存

7.单击网页终端按钮,进入终端界面再次执行上述4中的命令进行识别能力的测试。
系统返回的测试结果如下所示,显然已经能达到85%能识别出猫狗了。
image.png

4 提交离线任务

当您已经完成本次调优,可参考如下步骤保存代码并使用当前版本代码提交训练任务。
1.单击调试页面右上角的提交训练任务。
2.在单框中选择镜像和代码版本。
a.选择代码版本:单击新建代码版本,并在右边框中填写代码版本名。
b.选择镜像:选择直接使用当前工作镜像。

image.png
image.png

3.单击确定,进入提交任务页面。参考如下说明配置任务基本信息。
a.配置说明,其余保持默认即可。
i.任务模型:单机任务;
ii.GPU选择:B1.2 xlarge【需选择2Gpu的配置】
iii.启动命令
执行代码中的DogsVsCats.py脚本启动训练,训练所需数据为 G E M I N I D A T A I N 1 / D o g s V s C a t s 目录下的数据,训练结果保存在 GEMINI_DATA_IN1/DogsVsCats目录下的数据,训练结果保存在 GEMINIDATAIN1/DogsVsCats目录下的数据,训练结果保存在GEMINI_DATA_OUT目录下。执行该任务的启动命令如下:

python $GEMINI_RUN/DogsVsCats.py --num_epochs 5 --data_dir $GEMINI_DATA_IN1/DogsVsCats/ --train_dir $GEMINI_DATA_OUT

image.png

4.配置信息填写完成后,单击确定。
返回训练任务页面,在训练任务列表中查看该任务的状态,该任务大约5分钟即可训练完成。
·任务状态显示为成功则表示训练任务成功结束。
·任务状态为失败,可将鼠标悬置于失败字样上,查看失败原因。

image.png

5 结果集存储与下载

模型在经历了大规模数据的训练后,将具备相对精准的识别猫狗的能力,此时可下载模型并将模型部署到应用中。
趋动云平台提供了结果集存储与下载的功能,您在代码中设置的输出,都将被存储在结果集中。您可将结果集中的
模型文件导出为模型。

1.在左侧导航栏中选择结果,默认进入任务结果页面。
image.png

2.单击右上角的导出模型按钮,进入导出模型页面

image.png
image.png

3.单击创建,生成模型。
生成的模型将保存在平台中,您可将其公开性设置为公开,并将其分享给其他成员使用或进一步完善模型。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用两个GPU进行猫狗识别训练的方法可以通过数据并行或模型并行来实现。 1. 数据并行 数据并行是将训练数据分配到不同的GPU上,每个GPU上训练一个模型,然后将每个模型的梯度进行平均,从而更新模型参数。 代码示例: ```python import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision.datasets import ImageFolder from torchvision.transforms import transforms device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 定义模型 model = nn.Sequential( nn.Conv2d(3, 32, 3, 1, 1), nn.ReLU(), nn.MaxPool2d(2, 2), nn.Conv2d(32, 64, 3, 1, 1), nn.ReLU(), nn.MaxPool2d(2, 2), nn.Flatten(), nn.Linear(64 * 7 * 7, 128), nn.ReLU(), nn.Linear(128, 2) ) model = nn.DataParallel(model) # 将模型并行化 model.to(device) # 定义数据处理方式 transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]) ]) # 加载数据 train_dataset = ImageFolder('train/', transform=transform) train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True, num_workers=4) # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # 训练模型 for epoch in range(10): running_loss = 0.0 for i, (inputs, labels) in enumerate(train_loader): inputs, labels = inputs.to(device), labels.to(device) optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() if i % 100 == 99: print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 100)) running_loss = 0.0 ``` 2. 模型并行 模型并行是将模型的不同部分分配到不同的GPU上,每个GPU上训练部分模型,然后将每个部分的梯度进行传递和合并,从而更新模型参数。 代码示例: ```python import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision.datasets import ImageFolder from torchvision.transforms import transforms device1 = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") device2 = torch.device("cuda:1" if torch.cuda.is_available() else "cpu") # 定义模型 class Model(nn.Module): def __init__(self): super(Model, self).__init__() self.conv1 = nn.Conv2d(3, 32, 3, 1, 1) self.relu1 = nn.ReLU() self.maxpool1 = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(32, 64, 3, 1, 1) self.relu2 = nn.ReLU() self.maxpool2 = nn.MaxPool2d(2, 2) self.flatten = nn.Flatten() self.linear1 = nn.Linear(64 * 7 * 7, 128) self.relu3 = nn.ReLU() self.linear2 = nn.Linear(128, 2) def forward(self, x): x = self.conv1(x) x = self.relu1(x) x = self.maxpool1(x) x = self.conv2(x) x = self.relu2(x) x = self.maxpool2(x) x = self.flatten(x) x = self.linear1(x) x = self.relu3(x) x = self.linear2(x) return x model1 = nn.Sequential( nn.DataParallel(Model().to(device1), device_ids=[0, 1]) ) model2 = nn.Sequential( nn.DataParallel(Model().to(device2), device_ids=[2, 3]) ) # 定义数据处理方式 transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]) ]) # 加载数据 train_dataset = ImageFolder('train/', transform=transform) train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True, num_workers=4) # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer1 = optim.Adam(model1.parameters(), lr=0.001) optimizer2 = optim.Adam(model2.parameters(), lr=0.001) # 训练模型 for epoch in range(10): running_loss = 0.0 for i, (inputs, labels) in enumerate(train_loader): inputs, labels = inputs.to(device1), labels.to(device1) optimizer1.zero_grad() optimizer2.zero_grad() outputs1 = model1(inputs[:, :, :112, :]) inputs = inputs.flip(3) outputs2 = model2(inputs[:, :, :112, :]) outputs = torch.cat((outputs1, outputs2), dim=0) labels = torch.cat((labels, labels), dim=0) loss = criterion(outputs, labels) loss.backward() optimizer1.step() optimizer2.step() running_loss += loss.item() if i % 100 == 99: print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 100)) running_loss = 0.0 ``` 以上代码均为示例代码,具体实现需要根据具体情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值