#1 master

Merged
thomas-yanxin merged 76 commits from zeizei/OpenI_Learning:master into master 1 year ago
  1. +0
    -0
      MNIST_Example/MindSpore/config.py
  2. +0
    -0
      MNIST_Example/MindSpore/dataset.py
  3. +0
    -0
      MNIST_Example/MindSpore/eval.py
  4. +0
    -0
      MNIST_Example/MindSpore/inference.py
  5. +0
    -0
      MNIST_Example/MindSpore/lenet.py
  6. +0
    -0
      MNIST_Example/MindSpore/train.py
  7. +65
    -0
      MNIST_Example/PaddlePaddle/train.py
  8. +2
    -0
      Tutorial/第13课-如何进行模型训练.md
  9. +222
    -0
      Tutorial/第13课-如何进行模型训练(PaddlePaddle版本).md
  10. +1
    -1
      Tutorial/第14课-任务(创建任务、标签和里程碑).md
  11. +3
    -0
      Tutorial/第18课-CIFAR-10图像识别项目实战.md
  12. +252
    -0
      Tutorial/第18课-CIFAR-10图像识别项目实战(PaddlePaddle版本).md
  13. BIN
      img/L15-2-1.png
  14. BIN
      img/L15-2-10.png
  15. BIN
      img/L15-2-11.png
  16. BIN
      img/L15-2-12.png
  17. BIN
      img/L15-2-13.png
  18. BIN
      img/L15-2-14.png
  19. BIN
      img/L15-2-15.png
  20. BIN
      img/L15-2-2.png
  21. BIN
      img/L15-2-3.png
  22. BIN
      img/L15-2-4.png
  23. BIN
      img/L15-2-5.png
  24. BIN
      img/L15-2-6.png
  25. BIN
      img/L15-2-7.png
  26. BIN
      img/L15-2-8.png
  27. BIN
      img/L15-2-9.png
  28. BIN
      img/L15-2.png
  29. BIN
      img/L18-2.png
  30. BIN
      img/L18-3.png
  31. BIN
      img/L18-4.png
  32. BIN
      img/L18-5.png
  33. BIN
      img/L18-6.png
  34. BIN
      img/L18-7.png
  35. BIN
      img/L18-8.png
  36. BIN
      img/L18-9.png
  37. +0
    -0
      第14课-任务(创建任务、标签和里程碑)(PaddlePaddle)

MNIST_Example/config.py → MNIST_Example/MindSpore/config.py View File


MNIST_Example/dataset.py → MNIST_Example/MindSpore/dataset.py View File


MNIST_Example/eval.py → MNIST_Example/MindSpore/eval.py View File


MNIST_Example/inference.py → MNIST_Example/MindSpore/inference.py View File


MNIST_Example/lenet.py → MNIST_Example/MindSpore/lenet.py View File


MNIST_Example/train.py → MNIST_Example/MindSpore/train.py View File


+ 65
- 0
MNIST_Example/PaddlePaddle/train.py View File

@@ -0,0 +1,65 @@
# 加载数据集
import paddle
from paddle.vision.transforms import Compose, Normalize
transform = Compose([Normalize(mean=[127.5],
std=[127.5],
data_format='CHW')])
# 使用transform对数据集做归一化
print('download training data and load training data')
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
test_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)
print('load finished')
# 定义网络结构
import paddle.nn.functional as F
class LeNet(paddle.nn.Layer):
def __init__(self):
super(LeNet, self).__init__()
self.conv1 = paddle.nn.Conv2D(in_channels=1, out_channels=6, kernel_size=5, stride=1, padding=2)
self.max_pool1 = paddle.nn.MaxPool2D(kernel_size=2, stride=2)
self.conv2 = paddle.nn.Conv2D(in_channels=6, out_channels=16, kernel_size=5, stride=1)
self.max_pool2 = paddle.nn.MaxPool2D(kernel_size=2, stride=2)
self.linear1 = paddle.nn.Linear(in_features=16*5*5, out_features=120)
self.linear2 = paddle.nn.Linear(in_features=120, out_features=84)
self.linear3 = paddle.nn.Linear(in_features=84, out_features=10)
def forward(self, x):
x = self.conv1(x)
x = F.relu(x)
x = self.max_pool1(x)
x = self.conv2(x)
x = F.relu(x)
x = self.max_pool2(x)
x = paddle.flatten(x, start_axis=1,stop_axis=-1)
x = self.linear1(x)
x = F.relu(x)
x = self.linear2(x)
x = F.relu(x)
x = self.linear3(x)
return x
# 使用 Model.fit来训练模型
from paddle.metric import Accuracy
model = paddle.Model(LeNet()) # 用Model封装模型
optim = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters())
# 配置模型
model.prepare(
optim,
paddle.nn.CrossEntropyLoss(),
Accuracy()
)
# 训练模型
model.fit(train_dataset,
epochs=2,
batch_size=64,
verbose=1
)
# 使用 Model.evaluate 来预测模型
model.evaluate(test_dataset, batch_size=64, verbose=1)

+ 2
- 0
Tutorial/第13课-如何进行模型训练.md View File

@@ -1,6 +1,8 @@

# 第13课-如何进行模型训练

Mindspore | [PaddlePaddle](./第13课-如何进行模型训练(PaddlePaddle版本).md)

## 1 概述
- 本项目以LeNet-MNIST为例,简要介绍如何在启智AI协同平台上使用MindSpore完成训练任务,旨在为AI初学者提供云脑训练示例。
- 大家可以直接使用本项目提供的数据集和代码文件创建自己的训练任务。


+ 222
- 0
Tutorial/第13课-如何进行模型训练(PaddlePaddle版本).md View File

@@ -0,0 +1,222 @@

# 第13课-如何进行模型训练(PaddlePaddle版本)

## 1 概述
- 本项目以LeNet-MNIST为例,简要介绍如何在启智AI协同平台上使用PaddlePaddle完成训练任务,旨在为AI初学者提供云脑训练示例。
- 大家可以直接使用本项目提供的数据集和代码文件创建自己的训练任务。
- 同时也为初学者提供了全流程图文教程,只需要简单5步即可完成训练任务。


## 2 准备工作
- 启智平台使用准备,本项目需要用户创建启智平台账户,克隆代码到自己的账户,上传数据集,具体操作方法可以通过访问[OpenI_Learning](https://git.openi.org.cn/zeizei/OpenI_Learning)项目学习小白训练营系列课程进行学习。

### 2.1 数据和代码
- 数据集可从本项目的数据集目录中下载,[数据集下载](https://git.openi.org.cn/zeizei/OpenI_Learning/datasets?type=1)
- 数据文件说明
- MNISTData数据集是由10类28∗28的灰度图片组成,训练数据集包含60000张图片,测试数据集包含10000张图片。
- 数据集文件的目录结构如下:
> MNIST_Data
> ├── test
> │ ├── t10k-images-idx3-ubyte
> │ └── t10k-labels-idx1-ubyte
> └── train
> ├── train-images-idx3-ubyte
> └── train-labels-idx1-ubyte

### 2.2 示例代码
- 示例代码可从本仓库中[PaddlePaddle](https://git.openi.org.cn/zeizei/OpenI_Learning/src/branch/master/MNIST_Example/PaddlePaddle)文件路径下载,[train.py](https://git.openi.org.cn/zeizei/OpenI_Learning/src/branch/master/MNIST_Example/PaddlePaddle/train.py)即使用的训练脚本。
- 大家可以克隆该工程,开启云脑任务进行调试。




# 快速开始: PaddlePaddle手写识别GPU训练任务实例
如果你是初学者或者不熟悉平台云脑任务的使用,通过以下5个简单步骤,你将快速学会如何创建项目,并开启一个GPU训练任务,实现手写体识别。
<div align="left">
<img src= ../img/L15-2.png width=50%>
</div>
<br>

本节课主要演示如何在云脑1完成训练任务以及模型管理,大致内容如下:

> 创建项目

> 代码提交

> 关联数据集

> 创建训练任务

> 训练完成

## 1 创建项目
- 首先你需要注册一个启智社区的账号。

- 注册成功之后,请 [点击这里](https://openi.pcl.ac.cn/repo/create) 创建新项目。

- 进入创建项目详情界面

- 填写 `项目名称`
- 勾选 `初始化存储库`
- 勾选 `承诺遵守平台使用协议`
- 点击 `创建项目`
<div align="center">
<img src= ../img/L15-2-1.png width=100%>
</div>
<br>


## 2 代码提交
- 创建成功之后,来到项目主页。可以看到代码仓里已经默认生成了 `README.md` 描述文件,包含项目名称以及项目描述。
<div align="center">
<img src= ../img/L15-2-2.png width=100%>
</div>
<br>

- 点击蓝色的 `新建文件` 按钮,将下面的示例代码复制到代码框,并命名为 `train.py` 。

```Python
# 加载数据集
import paddle
from paddle.vision.transforms import Compose, Normalize

transform = Compose([Normalize(mean=[127.5],
std=[127.5],
data_format='CHW')])
# 使用transform对数据集做归一化
print('download training data and load training data')
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
test_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)
print('load finished')


# 定义网络结构
import paddle.nn.functional as F
class LeNet(paddle.nn.Layer):
def __init__(self):
super(LeNet, self).__init__()
self.conv1 = paddle.nn.Conv2D(in_channels=1, out_channels=6, kernel_size=5, stride=1, padding=2)
self.max_pool1 = paddle.nn.MaxPool2D(kernel_size=2, stride=2)
self.conv2 = paddle.nn.Conv2D(in_channels=6, out_channels=16, kernel_size=5, stride=1)
self.max_pool2 = paddle.nn.MaxPool2D(kernel_size=2, stride=2)
self.linear1 = paddle.nn.Linear(in_features=16*5*5, out_features=120)
self.linear2 = paddle.nn.Linear(in_features=120, out_features=84)
self.linear3 = paddle.nn.Linear(in_features=84, out_features=10)

def forward(self, x):
x = self.conv1(x)
x = F.relu(x)
x = self.max_pool1(x)
x = self.conv2(x)
x = F.relu(x)
x = self.max_pool2(x)
x = paddle.flatten(x, start_axis=1,stop_axis=-1)
x = self.linear1(x)
x = F.relu(x)
x = self.linear2(x)
x = F.relu(x)
x = self.linear3(x)
return x


# 使用 Model.fit来训练模型
from paddle.metric import Accuracy
model = paddle.Model(LeNet()) # 用Model封装模型
optim = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters())

# 配置模型
model.prepare(
optim,
paddle.nn.CrossEntropyLoss(),
Accuracy()
)

# 训练模型
model.fit(train_dataset,
epochs=2,
batch_size=64,
verbose=1
)


# 使用 Model.evaluate 来预测模型
model.evaluate(test_dataset, batch_size=64, verbose=1)
```
- 最终点击 `提交变更` 提交代码文件。
<div align="center">
<img src= ../img/L15-2-3.png width=100%>
</div>
<br>
<div align="center">
<img src= ../img/L15-2-4.png width=50%>
</div>
<br>

## 3 关联数据集
在项目页面中,依次点击 **数据集→关联数据集→关联数据集**, 搜索`MNIST_PaddlePaddle_GPU`,选择并关联。
<div align="center">
<img src= ../img/L15-2-5.png width=100%>
</div>
<br>
<div align="center">
<img src= ../img/L15-2-6.png width=100%>
</div>
<br>


## 4 创建训练任务
- 接下来创建云脑训练任务,在项目里找到 **云脑 → 训练任务 → 新建训练任务**。
<div align="center">
<img src= ../img/L15-2-8.png width=100%>
</div>
<br>

- 填写以下参数

- 算力集群 启智集群
- 计算资源 `CPU/GPU`
- 任务名称 `mnist_gpu`
- 镜像 复制并粘贴地址 `dockerhub.pcl.ac.cn:5000/user-images/openi:ColugoMum-product`
- 启动文件 `train.py`
- 数据集 本项目关联 `MNIST_PaddlePaddle_GPU/MNIST_DATA.zip`
- 资源规格 GPU: 1*A100, CPU: 4, 内存: 32GB, 共享内存: 16GB
- 其他配置保持默认值即可

<div align="center">
<img src= ../img/L15-2-9.png width=100%>
</div>
<br>

<div align="center">
<img src= ../img/L15-2-11.png width=100%>
</div>
<br>
<div align="center">
<img src= ../img/L15-2-12.png width=100%>
</div>
<br>

## 5 训练完成
- 当训练任务的状态由 **WAITING** 变为 **SUCCEEDED**,任务训练成功。点击 任务名称 查看详情。

### 5.1 在配置信息界面可以查看任务配置
- 包括任务具体配置,包括镜像,数据集,资源规格,运行时间以及脚本文件。
<div align="center">
<img src= ../img/L15-2-13.png width=100%>
</div>
<br>

### 5.2 在日志界面可以查看运行日志
- 这里是脚本文件中的所有输出打印,也叫做你的 `任务日志`。你可以自行在脚本文件中编辑你输出的信息。`示例脚本` 中打印了训练中每一个 batch 的损失,以及模型最终的准确率。
<div align="center">
<img src= ../img/L15-2-14.png width=100%>
</div>
<br>

### 5.3 训练结束后可以下载模型文件
- 在这里你可以下载在脚本中输出的所有文件以及日志文本。`示例脚本` 里输出了最终的PyTorch模型文件。

<div align="center">
<img src= ../img/L15-2-15.png width=100%>
</div>
<br>

+ 1
- 1
Tutorial/第14课-任务(创建任务、标签和里程碑).md View File

@@ -1,4 +1,4 @@
# 小白训练营第10课-任务
# 小白训练营第14课-任务(创建任务、标签和里程碑)
## 介绍如何创建任务、添加任务标签、添加里程碑和指派任务

前段时间,我们针对平台功能体验做了一番用户调研,有60%的用户在使用【任务】进行自我驱动与团队协作,看来这个功能是很有必要且非常实用了~


+ 3
- 0
Tutorial/第18课-CIFAR-10图像识别项目实战.md View File

@@ -1,5 +1,8 @@
# 第18课-CIFAR-10图像识别项目实战

Mindspore | [PaddlePaddle](./第18课-CIFAR-10图像识别项目实战(PaddlePaddle版本).md)


## 如何基于云脑1和云脑2调试任务

hi,大家好,经历了前面多轮课程,相比大家已经对平台的各部分功能差不多都熟悉了,恭喜大家已经不再是当初那个小白啦~


+ 252
- 0
Tutorial/第18课-CIFAR-10图像识别项目实战(PaddlePaddle版本).md View File

@@ -0,0 +1,252 @@
# 第18课-CIFAR-10图像识别项目实战(PaddlePaddle版本)

hi,大家好,经历了前面多轮课程,相比大家已经对平台的各部分功能差不多都熟悉了,恭喜大家已经不再是当初那个小白啦~

今天我们通过平台演示一个猫狗图像识别的小项目,将前面所学到的知识串联起来加以巩固,开始向启智社区达人迈进!

话不多说,接下来进入**CIFAR10图像数据集**识别的项目实操。(对于此教程有问题的童鞋,可以[点此](https://openi.pcl.ac.cn/zeizei/OpenI_Learning/issues/39)参考大家的经验~)


## 快速开始: PaddlePaddle手写识别GPU训练任务实例
如果你是初学者或者不熟悉平台云脑任务的使用,通过以下5个简单步骤,你将快速学会如何创建项目,并开启一个GPU训练任务,实现10个类别图像的识别。

cifar10数据集由60000张大小为32 * 32的彩色图片组成,其中有50000张图片组成了训练集,另外10000张图片组成了测试集。

这些图片分为10个类别,**本课程将训练一个模型能够把图片进行正确的分类**。

<div align="left">
<img src= ../img/L18-2.png width=50%>
</div>
<br>

本节课主要演示如何在云脑1完成训练任务以及模型管理,大致内容如下:

> 创建项目

> 代码提交

> 关联数据集

> 创建训练任务

> 训练完成


## 1 创建项目
- 首先你需要注册一个启智社区的账号。

- 注册成功之后,请 [点击这里](https://openi.pcl.ac.cn/repo/create) 创建新项目。

- 进入创建项目详情界面

- 填写 `项目名称`
- 勾选 `初始化存储库`
- 勾选 `承诺遵守平台使用协议`
- 点击 `创建项目`
<div align="center">
<img src= ../img/L15-2-1.png width=100%>
</div>
<br>


## 2 代码提交
- 创建成功之后,来到项目主页。可以看到代码仓里已经默认生成了 `README.md` 描述文件,包含项目名称以及项目描述。
<div align="center">
<img src= ../img/L15-2-2.png width=100%>
</div>
<br>

- 点击蓝色的 `新建文件` 按钮,将下面的示例代码复制到代码框,并命名为 `train.py` 。

```Python
# 环境配置
import paddle
import paddle.nn.functional as F
from paddle.vision.transforms import ToTensor
import numpy as np


# 数据加载
transform = ToTensor()
cifar10_train = paddle.vision.datasets.Cifar10(mode='train',
transform=transform)
cifar10_test = paddle.vision.datasets.Cifar10(mode='test',
transform=transform)


# 构建网络
class MyNet(paddle.nn.Layer):
def __init__(self, num_classes=1):
super(MyNet, self).__init__()

self.conv1 = paddle.nn.Conv2D(in_channels=3, out_channels=32, kernel_size=(3, 3))
self.pool1 = paddle.nn.MaxPool2D(kernel_size=2, stride=2)

self.conv2 = paddle.nn.Conv2D(in_channels=32, out_channels=64, kernel_size=(3,3))
self.pool2 = paddle.nn.MaxPool2D(kernel_size=2, stride=2)

self.conv3 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=(3,3))

self.flatten = paddle.nn.Flatten()

self.linear1 = paddle.nn.Linear(in_features=1024, out_features=64)
self.linear2 = paddle.nn.Linear(in_features=64, out_features=num_classes)

def forward(self, x):
x = self.conv1(x)
x = F.relu(x)
x = self.pool1(x)

x = self.conv2(x)
x = F.relu(x)
x = self.pool2(x)

x = self.conv3(x)
x = F.relu(x)

x = self.flatten(x)
x = self.linear1(x)
x = F.relu(x)
x = self.linear2(x)
return x


# 模型训练&预测
epoch_num = 10
batch_size = 32
learning_rate = 0.001

val_acc_history = []
val_loss_history = []

def train(model):
print('start training ... ')
# turn into training mode
model.train()

opt = paddle.optimizer.Adam(learning_rate=learning_rate,
parameters=model.parameters())

train_loader = paddle.io.DataLoader(cifar10_train,
shuffle=True,
batch_size=batch_size)

valid_loader = paddle.io.DataLoader(cifar10_test, batch_size=batch_size)
for epoch in range(epoch_num):
for batch_id, data in enumerate(train_loader()):
x_data = data[0]
y_data = paddle.to_tensor(data[1])
y_data = paddle.unsqueeze(y_data, 1)

logits = model(x_data)
loss = F.cross_entropy(logits, y_data)

if batch_id % 1000 == 0:
print("epoch: {}, batch_id: {}, loss is: {}".format(epoch, batch_id, loss.numpy()))
loss.backward()
opt.step()
opt.clear_grad()

# evaluate model after one epoch
model.eval()
accuracies = []
losses = []
for batch_id, data in enumerate(valid_loader()):
x_data = data[0]
y_data = paddle.to_tensor(data[1])
y_data = paddle.unsqueeze(y_data, 1)

logits = model(x_data)
loss = F.cross_entropy(logits, y_data)
acc = paddle.metric.accuracy(logits, y_data)
accuracies.append(acc.numpy())
losses.append(loss.numpy())

avg_acc, avg_loss = np.mean(accuracies), np.mean(losses)
print("[validation] accuracy/loss: {}/{}".format(avg_acc, avg_loss))
val_acc_history.append(avg_acc)
val_loss_history.append(avg_loss)
model.train()

model = MyNet(num_classes=10)
train(model)
```
- 最终点击 `提交变更` 提交代码文件。
<div align="center">
<img src= ../img/L15-2-3.png width=100%>
</div>
<br>
<div align="center">
<img src= ../img/L15-2-4.png width=50%>
</div>
<br>

## 3 关联数据集
在项目页面中,依次点击 **数据集→关联数据集→关联数据集**, 搜索`CIFAR10_PaddlePaddle_GPU`,选择并关联。
<div align="center">
<img src= ../img/L15-2-5.png width=100%>
</div>
<br>
<div align="center">
<img src= ../img/L18-3.png width=100%>
</div>
<br>


## 4 创建训练任务
- 接下来创建云脑训练任务,在项目里找到 **云脑 → 训练任务 → 新建训练任务**。
<div align="center">
<img src= ../img/L15-2-8.png width=100%>
</div>
<br>

- 填写以下参数

- 算力集群 启智集群
- 计算资源 `CPU/GPU`
- 任务名称 `cifar10_gpu`
- 镜像 复制并粘贴地址 `dockerhub.pcl.ac.cn:5000/user-images/openi:ColugoMum-product`
- 启动文件 `train.py`
- 数据集 本项目关联 `CIFAR10_PaddlePaddle_GPU/cifar10.zip`
- 资源规格 GPU: 1*A100, CPU: 4, 内存: 32GB, 共享内存: 16GB
- 其他配置保持默认值即可

<div align="center">
<img src= ../img/L18-4.png width=100%>
</div>
<br>

<div align="center">
<img src= ../img/L18-5.png width=100%>
</div>
<br>
<div align="center">
<img src= ../img/L18-6.png width=100%>
</div>
<br>

## 5 训练完成
- 当训练任务的状态由 **WAITING** 变为 **SUCCEEDED**,任务训练成功。点击 任务名称 查看详情。

### 5.1 在配置信息界面可以查看任务配置
- 包括任务具体配置,包括镜像,数据集,资源规格,运行时间以及脚本文件。
<div align="center">
<img src= ../img/L18-7.png width=100%>
</div>
<br>

### 5.2 在日志界面可以查看运行日志
- 这里是脚本文件中的所有输出打印,也叫做你的 `任务日志`。你可以自行在脚本文件中编辑你输出的信息。`示例脚本` 中打印了训练中每一个 batch 的损失,以及模型最终的准确率。
<div align="center">
<img src= ../img/L18-8.png width=100%>
</div>
<br>

### 5.3 训练结束后可以下载模型文件
- 在这里你可以下载在脚本中输出的所有文件以及日志文本。`示例脚本` 里输出了最终的PyTorch模型文件。

<div align="center">
<img src= ../img/L18-9.png width=100%>
</div>
<br>

BIN
img/L15-2-1.png View File

Before After
Width: 1416  |  Height: 952  |  Size: 61 KiB

BIN
img/L15-2-10.png View File

Before After
Width: 1677  |  Height: 1371  |  Size: 242 KiB

BIN
img/L15-2-11.png View File

Before After
Width: 1350  |  Height: 966  |  Size: 51 KiB

BIN
img/L15-2-12.png View File

Before After
Width: 1371  |  Height: 732  |  Size: 43 KiB

BIN
img/L15-2-13.png View File

Before After
Width: 1360  |  Height: 777  |  Size: 47 KiB

BIN
img/L15-2-14.png View File

Before After
Width: 1388  |  Height: 730  |  Size: 98 KiB

BIN
img/L15-2-15.png View File

Before After
Width: 1378  |  Height: 733  |  Size: 40 KiB

BIN
img/L15-2-2.png View File

Before After
Width: 1677  |  Height: 1339  |  Size: 200 KiB

BIN
img/L15-2-3.png View File

Before After
Width: 1330  |  Height: 986  |  Size: 89 KiB

BIN
img/L15-2-4.png View File

Before After
Width: 492  |  Height: 431  |  Size: 17 KiB

BIN
img/L15-2-5.png View File

Before After
Width: 1677  |  Height: 1371  |  Size: 219 KiB

BIN
img/L15-2-6.png View File

Before After
Width: 1271  |  Height: 714  |  Size: 43 KiB

BIN
img/L15-2-7.png View File

Before After
Width: 1677  |  Height: 1314  |  Size: 230 KiB

BIN
img/L15-2-8.png View File

Before After
Width: 1677  |  Height: 1314  |  Size: 192 KiB

BIN
img/L15-2-9.png View File

Before After
Width: 1380  |  Height: 977  |  Size: 55 KiB

BIN
img/L15-2.png View File

Before After
Width: 1136  |  Height: 967  |  Size: 54 KiB Width: 900  |  Height: 900  |  Size: 17 KiB

BIN
img/L18-2.png View File

Before After
Width: 466  |  Height: 362  |  Size: 295 KiB

BIN
img/L18-3.png View File

Before After
Width: 1441  |  Height: 669  |  Size: 48 KiB

BIN
img/L18-4.png View File

Before After
Width: 1343  |  Height: 979  |  Size: 51 KiB

BIN
img/L18-5.png View File

Before After
Width: 1396  |  Height: 961  |  Size: 54 KiB

BIN
img/L18-6.png View File

Before After
Width: 1370  |  Height: 731  |  Size: 43 KiB

BIN
img/L18-7.png View File

Before After
Width: 1349  |  Height: 776  |  Size: 47 KiB

BIN
img/L18-8.png View File

Before After
Width: 1328  |  Height: 723  |  Size: 87 KiB

BIN
img/L18-9.png View File

Before After
Width: 1348  |  Height: 726  |  Size: 40 KiB

+ 0
- 0
第14课-任务(创建任务、标签和里程碑)(PaddlePaddle) View File


Loading…
Cancel
Save