-
【功能模块】https://www.mindspore.cn/tutorial/training/zh-CN/master/use/load_model_for_inference_and_transfer.html【操作步骤&问题现象】1、报错Invalid data, no valid data matching the dataset API ImageFolderDataset. Please check file path or dataset API.2、需要下载垃圾分类数据集放到/ssd/data/garbage/train目录下,请问有这个垃圾分类数据集的下载地址吗【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
tf训练代码迁移到NPU上执行时报错:tensorflow.python.framework.errors_impl.InternalError: Missing 0-th output from node model/stacks/stage_0/dropout (defined at /usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py:1748)这个日志说明报错的算子没有下沉到NPU上执行,那么原因就有两种:1.训练代码迁移有问题,算子没有在NPU上执行。算子是否下沉是由config = tf.ConfigProto() custom_op = config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = custom_op.parameter_map[].b = config.graph_options.rewrite_options.remapping = RewriterConfig.OFF控制的,use_off_line要设置成true2.如果迁移没有问题,那就是代码中有ascend平台不支持的算子,可以在输出到屏幕的日志中搜索“is not in white list”查找不支持的算子
-
将GPU上可以正确运行的tf模型训练代码迁移到NPU上,执行时报错:tensorflow.python.framework.errors_impl.InvalidArgumentError: Ref Tensors (e.g., Variables) are not supported as results: tensor RGB/dense/kernel:0, dst is Momentum/update_RGB/dense/kernel/ApplyMomentum报错原因:训练代码中有当前ascend训练平台不支持的算子,ascend无法正确分拆图,导致错误。可以在训练时输出到屏幕上的日志中搜索“is not in white list”,即可查看到不支持的算子
-
将tensorflow模型训练代码迁移到ascend910上时,报错Cannot assign a device for operation:Traceback (most recent call last): File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/client/session.py", line 1365, in _do_call return fn(*args) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/client/session.py", line 1348, in _run_fn self._extend_graph() File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/client/session.py", line 1388, in _extend_graph tf_session.ExtendSession(self._session)tensorflow.python.framework.errors_impl.InvalidArgumentError: Cannot assign a device for operation model/preprocessing/pad_1: {{node model/preprocessing/pad_1}} was explicitly assigned to /device:GPU:0 but available devices are [ /job:localhost/replica:0/task:0/device:CPU:0, /job:localhost/replica:0/task:0/device:XLA_CPU:0 ]. Make sure the device specification refers to a valid device. The requested device appears to be a GPU, but CUDA is not enabled. [[model/preprocessing/pad_1]]这个是因为tensorflow代码中有使用with tf.device指定了算子执行的设备(GPU或者CPU)。而在ascend平台上,算子执行设备环境原则:1、Ascend平台根据算子白名单来决定该算子是否下沉的, 若是该算子在白名单内,则默认是下沉到NPU上执行的,非白名单内的算子,则在CPU上执行。不是通过tf.device显示指定的。2、若是要显示的指定该算子运行在CPU上,则可以参考混合计算章节,通过without_npu_compile_scope自行配置不下沉的算子:https://support.huaweicloud.com/mprtg-A800_9000_9010/atlasprtg_13_0033.html所以我们在迁移的时候,要删除代码中的with tf.device语句
-
在我们对迁移学习有了一定了解,工作方式也有了一定认识后,一起来看看我们能用的那些经典模型吧,这里主要介绍的是火热的计算机视觉方向的哦。计算机视觉中的4个预训练模型这里有四个预先训练好的网络,可以用于计算机视觉任务,如图像生成、神经风格转换、图像分类、图像描述、异常检测等:让我们一个一个地深入研究。VGG-19VGG是一种卷积神经网络,深度为19层。它是由牛津大学的Karen Simonyan和Andrew Zisserman在2014年构建和训练的,论文为:Very Deep Convolutional Networks for large Image Recognition。VGG-19网络还使用ImageNet数据库中的100多万张图像进行训练。当然,你可以使用ImageNet训练过的权重导入模型。这个预先训练过的网络可以分类多达1000个物体。对224x224像素的彩**像进行网络训练。以下是关于其大小和性能的简要信息:Inceptionv3 (GoogLeNet)Inceptionv3是一个深度为50层的卷积神经网络。它是由谷歌构建和训练的,你可以查看这篇论文:“Going deep with convolutions”。预训练好的带有ImageNet权重的Inceptionv3可以分类多达1000个对象。该网络的图像输入大小为299x299像素,大于VGG19网络。VGG19是2014年ImageNet竞赛的亚军,而Inception是冠军。以下是对Inceptionv3特性的简要总结:ResNet50 (Residual Network)ResNet50是一个卷积神经网络,深度为50层。它是由微软于2015年建立和训练的,论文:[Deep Residual Learning for Image Recognition](http://deep Residual Learning for Image Recognition /)。该模型对ImageNet数据库中的100多万张图像进行了训练。与VGG-19一样,它可以分类多达1000个对象,网络训练的是224x224像素的彩**像。以下是关于其大小和性能的简要信息:如果你比较ResNet50和VGG19,你会发现ResNet50实际上比VGG19性能更好,尽管它的复杂性更低。你也可以使用更新的版本,如ResNet101,ResNet152,ResNet50V2,ResNet101V2,ResNet152V2。EfficientNetEfficientNet是一种最先进的卷积神经网络,由谷歌在2019年的论文“efficient entnet: Rethinking Model Scaling for convolutional neural Networks”中训练并发布。EfficientNet有8种可选实现(B0到B7),甚至最简单的EfficientNet B0也是非常出色的。通过530万个参数,实现了77.1%的最高精度性能。EfficientNetB0的特性简要介绍如下:其他的计算机视觉问题的预训练模型我们列出了四种最先进的获奖卷积神经网络模型。然而,还有几十种其他模型可供迁移学习使用。下面是对这些模型的基准分析,这些模型都可以在Keras Applications中获得。总结在一个我们可以很容易地获得最先进的神经网络模型的世界里,试图用有限的资源建立你自己的模型就像是在重复发明轮子,是毫无意义的。相反,尝试使用这些训练模型,在上面添加一些新的层,考虑你的特殊计算机视觉任务,然后训练。其结果将比你从头构建的模型更成功。
-
通过前面的介绍和学习,我们对迁移学习已经有了一定的认识和了解,下面让我们更深入的了解一下,看看迁移学习那点事。迁移学习是如何工作的?实现迁移学习有三个要求:开发开源预训练模型预训练的模型是由其他人创建和训练来解决与我们类似的问题的模型。在实践中,几乎总是有人是科技巨头或一群明星研究人员。他们通常选择一个非常大的数据集作为他们的基础数据集,比如ImageNet或Wikipedia Corpus。然后,他们创建一个大型神经网络(例如,VGG19有143,667,240个参数)来解决一个特定的问题(例如,这个问题用VGG19做图像分类。)当然,这个预先训练过的模型必须公开,这样我们就可以利用这些模型并重新使用它们。重用模型在我们掌握了这些预先训练好的模型之后,我们重新定位学习到的知识,包括层、特征、权重和偏差。有几种方法可以将预先训练好的模型加载到我们的环境中。最后,它只是一个包含相关信息的文件/文件夹。然而,深度学习库已经托管了许多这些预先训练过的模型,这使得它们更容易访问:你可以使用上面的一个源来加载经过训练的模型。它通常会有所有的层和权重,你可以根据你的意愿调整网络。对问题进行微调现在的模型也许能解决我们的问题。对预先训练好的模型进行微调通常更好,原因有两个:一般来说,在神经网络中,底层和中层通常代表一般的特征,而顶层则代表特定问题的特征。由于我们的新问题与原来的问题不同,我们倾向于删除顶层。通过为我们的问题添加特定的层,我们可以达到更高的精度。在删除顶层之后,我们需要放置自己的层,这样我们就可以得到我们想要的输出。例如,使用ImageNet训练的模型可以分类多达1000个对象。如果我们试图对手写数字进行分类(例如,MNIST classification),那么最后得到一个只有10个神经元的层可能会更好。在我们将自定义层添加到预先训练好的模型之后,我们可以用特殊的损失函数和优化器来配置它,并通过额外的训练进行微调。
-
我们大多数人已经尝试过,通过几个机器学习教程来掌握神经网络的基础知识。这些教程非常有助于了解人工神经网络的基本知识,如循环神经网络,卷积神经网络,GANs和自编码器。但是这些教程的主要功能是为你在现实场景中实现做准备。现在,如果你计划建立一个利用深度学习的人工智能系统,你要么(i)有一个非常大的预算用于培训优秀的人工智能研究人员,或者(ii)可以从迁移学习中受益。什么是迁移学习?迁移学习是机器学习和人工智能的一个分支,其目的是将从一个任务(源任务)中获得的知识应用到一个不同但相似的任务(目标任务)中。例如,在学习对维基百科文本进行分类时获得的知识可以用于解决法律文本分类问题。另一个例子是利用在学习对汽车进行分类时获得的知识来识别天空中的鸟类。这些样本之间存在关联。我们没有在鸟类检测上使用文本分类模型。迁移学习是指从相关的已经学习过的任务中迁移知识,从而对新的任务中的学习进行改进总而言之,迁移学习是一个让你不必重复发明轮子的领域,并帮助你在很短的时间内构建AI应用。迁移学习的历史为了展示迁移学习的力量,我们可以引用Andrew Ng的话:迁移学习将是继监督学习之后机器学习商业成功的下一个驱动因素迁移学习的历史可以追溯到1993年。Lorien Pratt的论文“Discriminability-Based Transfer between Neural Networks”打开了潘多拉的盒子,向世界介绍了迁移学习的潜力。1997年7月,“Machine Learning”杂志发表了一篇迁移学习论文专刊。随着该领域的深入,诸如多任务学习等相邻主题也被纳入迁移学习领域。“Learning to Learn”是这一领域的先驱书籍之一。如今,迁移学习是科技企业家构建新的人工智能解决方案、研究人员推动机器学习前沿的强大源泉。
-
1. 迁移学习(Finetuning)和断点训练(Resume Training) 迁移学习(Finetuning):先基于一个数据集训练出一个checkpoint,然后在另一个数据集(与前一个数据集种类不同)加载之前的预训练模型进行训练,加载时要移除分类相关层的权重和momentum/adam动量,一般用于用户数据集发生种类改变或者分类类别数改变的场景。 断点训练(Resume Training):基于之前还没有训练完的任务继续训练,一般情况下数据集不能改变,或者仅改变了每个类的数据样本数量,而类别本身没有改变。加载上一个训练任务产生的checkpoint文件中的所有权重(包括momentum/adam动量、global_step、学习率等) 下图展示了Finetuning和Resume Training时加载权重的不同范围 2. 如何判断自己是Finetuning还是Resume Training,以图像分类为例 3. TensorFlow的checkpoint解释 观察一个训练作业的OBS输出文件如下一般tensorflow的模型由4个文件组成,例如我们保存的最后一个模型是:checkpointmodel.ckpt-1320.data-00000-of-00001model.ckpt-1320.indexmodel.ckpt-1320.meta `checkpoint`这个文件是索引文件,打开`checkpoint`文件是以下内容:其中model_checkpoint_path字段就是以相对路径记录要加载的模型文件前缀,一定要确认model_checkpoint_path字段中记录的模型文件是存在的,才能正确的加载。 4. 怎么配置Resume Training和Finetuning 本案例使用RetinaNet-ResNet50的GPU训练4.0.0以上版本 4.1. 准备工作用户第一次拿到AI市场算法进行训练时,选择的“模型输出”总是一个空白的目录,此时一定是加载开源数据集预训练模型的Finetuning(配置在代码中会默认加载)。 使用该算法创建一个训练作业,这里我自定义了固定的学习率,在训练22个epoch后会停止 训练完成之后,观察日志:从日志中可以看出,22个epoch在step=1320的时候停止了,并且保存了最后一个step=1320的checkpoint。 4.2. Resume Training场景 我们继续训练第二个版本,先来实现Resume Training场景,在V0001的基础上点击“修改”在创建训练作业页面,ModelArts自动在V0001的“模型输出”目录下新建了一个V0002,并且指定了这个目录为默认的“模型输出”。如果要实现Resume Training,我们需要将“模型输出”改为V0001时的目录,也就是:因为是Resume Training,所以global_step也会加载,模型将从第22个epoch开始训练,所以学习率我们一定要做一些修改1)可以改成如下:learning_rate_strategy=4:0.0001->0.01,20:0.01~>0.0001,22:0.0001,25:0.00001可以看到22个epoch之前的学习率已经不会被使用了,我又追加定义了22~25个epoch的学习率为0.00001,那么这次Resume Training将追加训练3个epoch,并且使用0.00001为学习率 2)或者改成如下:learning_rate_strategy=0.001这种配置会将初始学习率设置为0.001,并且开始自适应学习率,知道精度不提升后停止训练(用户无法控制最终训练的epoch数,并且数据集必须是已经切分为train/eval的) 提交训练作业,观察日志可以看到训练作业直接从1320步加载继续训练 4.3 Finetuning场景如果用户数据集的类别发生了改变(比如用户新增了一个类别,或者删除了一个类别,或者类别的顺序发生了改变),那么Resume Training场景就不适用了,就要使用Finetuning场景(可以基于最开始的COCO预训练模型Finetuning,也可以基于第一个版本的训练作业Finetuning)。1)如果基于最开始的COCO预训练模型Finetuning,基于第一个版本的训练作业(V0001)再创建一个训练作业(假设是V0003),此时我们需要将“模型输出”指定到一个全新的空白目录即可(此时是从COCO预训练模型Finetuning,不会沿用V0001的任何模型) 2)如果想基于第一个版本的训练作业,那么基于第一个版本的训练作业(V0001)再创建一个训练作业(假设是V0003),此时我们需要将“模型输出”指定到一个全新的空白目录,并且新增一个参数checkpoint_url,指定第一个版本(V0001)的“模型输出”目录作为checkpoint_url的值(每个算法提供的参数名可能不同,大部分的都叫checkpoint_url,如果不叫checkpoint_url一般会在文档中说明,或者联系客户咨询,本案例为RetinaNet) s3://开头的路径一般可以支持OBS,后面接桶名,在后面接路径。由于Finetuning会重新初始化分类层,所以一般精度会从0开始,但是上升的比较快。
上滑加载中
推荐直播
-
DTT年度收官盛典:华为开发者空间大咖汇,共探云端开发创新
2025/01/08 周三 16:30-18:00
Yawei 华为云开发工具和效率首席专家 Edwin 华为开发者空间产品总监
数字化转型进程持续加速,驱动着技术革新发展,华为开发者空间如何巧妙整合鸿蒙、昇腾、鲲鹏等核心资源,打破平台间的壁垒,实现跨平台协同?在科技迅猛发展的今天,开发者们如何迅速把握机遇,实现高效、创新的技术突破?DTT 年度收官盛典,将与大家共同探索华为开发者空间的创新奥秘。
回顾中 -
GaussDB应用实战:手把手带你写SQL
2025/01/09 周四 16:00-18:00
Steven 华为云学堂技术讲师
本期直播将围绕数据库中常用的数据类型、数据库对象、系统函数及操作符等内容展开介绍,帮助初学者掌握SQL入门级的基础语法。同时在线手把手教你写好SQL。
去报名 -
算子工具性能优化新特性演示——MatMulLeakyRelu性能调优实操
2025/01/10 周五 15:30-17:30
MindStudio布道师
算子工具性能优化新特性演示——MatMulLeakyRelu性能调优实操
即将直播
热门标签