diff --git a/docs/faq/source_zh_cn/backend_running.md b/docs/faq/source_zh_cn/backend_running.md index d0d5205325c41189b488756a919f064457718984..933df1b5324209f0dfc2a22f9cda297a81d1be2d 100644 --- a/docs/faq/source_zh_cn/backend_running.md +++ b/docs/faq/source_zh_cn/backend_running.md @@ -4,6 +4,39 @@ +**Q:请问想加载PyTorch预训练好的模型用于MindSpore模型finetune有什么方法?** + +A:需要把PyTorch和MindSpore的参数进行一一对应,因为网络定义的灵活性,所以没办法提供统一的转化脚本。 +需要根据场景书写定制化脚本,可参考[checkpoint高级用法](https://gitee.com/mindspore/docs/blob/master/tutorials/training/source_zh_cn/advanced_use/advanced_usage_of_checkpoint.md#%E8%BD%AC%E5%8C%96%E5%85%B6%E4%BB%96%E6%A1%86%E6%9E%B6ckpt%E4%B8%BAms%E6%A0%BC%E5%BC%8F) + +
+ +**Q:怎么将PyoTrch的`dataset`转换成MindSpore的`dataset`?** + +A:MindSpore和PyTorch的自定义数据集逻辑是比较类似的,需要用户先定义一个自己的`dataset`类,该类负责定义`__init__`,`__getitem__`,`__len__`来读取自己的数据集,然后将该类实例化为一个对象(如:`dataset/dataset_generator`),最后将这个实例化对象传入`GeneratorDataset`(mindspore用法)/`DataLoader`(pytorch用法),至此即可以完成自定义数据集加载了。而mindspore在`GeneratorDataset`的基础上提供了进一步的`map`->`batch`操作,可以很方便的让用户在`map`内添加一些其他的自定义操作,并将其`batch`起来。 +对应的MindSpore的自定义数据集加载如下: + +```python +#1 加载/数据增强,shuffle,sampler等 +class Mydata: + def __init__(self): + np.random.seed(58) + self.__data = np.random.sample((5, 2)) + self.__label = np.random.sample((5, 1)) + def __getitem__(self, index): + return (self.__data[index], self.__label[index]) + def __len__(self): + return len(self.__data) +dataset_generator = Mydata() +dataset = ds.GeneratorDataset(dataset_generator, ["data", "label"], shuffle=False) +#2 自定义增强 +dataset = dataset.map(operations=pyFunc, …) +#3 batch +dataset = dataset.batch(batch_size, drop_remainder=True) +``` + +
+ **Q:如何查看模型参数量?** A:可以直接加载CheckPoint统计,可能额外统计了动量和optimizer中的变量,需要过滤下相关变量。 diff --git a/docs/faq/source_zh_cn/platform_and_system.md b/docs/faq/source_zh_cn/platform_and_system.md index 983560523dabb42911d52ccaafec0cfac54192bb..f1ec4e0c3b4c73b96c760b239d2e8117179abdc9 100644 --- a/docs/faq/source_zh_cn/platform_and_system.md +++ b/docs/faq/source_zh_cn/platform_and_system.md @@ -4,6 +4,18 @@ +**Q:PyNative模式和Graph模式的区别?** + +A: 在使用效率上,两个模式使用的算子是一致的,因此相同的网络和算子,分别在两个模式下执行时,精度效果是一致的。由于执行机理的差异,网络的执行性能是会不同的,并且在理论上,MindSpore提供的算子同时支持PyNative模式和Graph模式; + +在场景使用方面,Graph模式需要一开始就构建好网络结构,然后框架做整图优化和执行,对于网络固定没有变化,且需要高性能的场景比较适合; + +在不同硬件(`Ascend`、`GPU`和`CPU`)资源上都支持这两种模式; + +代码调试方面,由于是逐行执行算子,因此用户可以直接调试Python代码,在代码中任意位置打断点查看对应算子`/api`的输出或执行结果。而Graph模式由于在构造函数里只是完成网络构造,实际没有执行,因此在`construct`函数里打断点是无法获取对应算子的输出,而只能等整网执行中指定对应算子的输出打印,在网络执行完成后进行查看。 + +
+ **Q:使用PyNative模式能够进行迁移学习?** A: PyNative模式是兼容迁移学习的,更多的教程信息,可以参考[预训练模型加载代码详解](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/cv_mobilenetv2_fine_tune.html#id7)。 diff --git a/docs/faq/source_zh_cn/supported_operators.md b/docs/faq/source_zh_cn/supported_operators.md index 16a3c6e09bdbc40b06a3288dc0f930cb2c7a5631..ace34dbd931fcff27f4de09926219ab497884446 100644 --- a/docs/faq/source_zh_cn/supported_operators.md +++ b/docs/faq/source_zh_cn/supported_operators.md @@ -4,6 +4,12 @@ +**Q:`TransData`算子的功能是什么,能否优化性能?** + +A:`TransData`算子出现的场景是:如果网络中相互连接的算子使用的数据格式不一致(如NC1HWC0),框架就会自动插入`transdata`算子使其转换成一致的数据格式,然后再进行计算。 可以考虑训练的时候用我们的`amp`做混合精度,这样能减少一些`fp32`的运算,应该能减少一些`transdata`算子的调用。 + +
+ **Q:算子`Concat`拼接包含多个Tensor的元组出错,似乎传入的`tensor list`元素个数>=192就会报错。如果要`Concat`包含多个Tensor的元组,有什么较好的解决方案?** A:这个昇腾算子底层规格限制一次拼接的Tensor个数不能超过192个,可以尝试分开两次进行拼接。