[{"data":1,"prerenderedAt":380},["ShallowReactive",2],{"content-query-5txHUzF2OO":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"cover":11,"type":12,"category":13,"body":14,"_type":374,"_id":375,"_source":376,"_file":377,"_stem":378,"_extension":379},"/technology-blogs/zh/2499","zh",false,"","昇思应用案例 | 助推AI研究的利器：自动化向量vmap","本案例介绍自动向量化vmap接口的使用方式，将模型或函数中高度重复的运算逻辑转换为并行的向量运算逻辑，从而获得更加精简的代码逻辑以及更高效的执行性能。","2023-05-17","https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/5ac1cf0bc09945618abcd42fd7f4a8e6.png","technology-blogs","实践",{"type":15,"children":16,"toc":369},"root",[17,25,34,41,48,58,63,71,80,88,95,102,109,116,123,130,137,144,151,158,165,172,177,186,191,196,201,209,214,222,227,232,240,248,253,258,266,273,281,286,294,302,307,315,322,327,339,349,359],{"type":18,"tag":19,"props":20,"children":22},"element","h1",{"id":21},"昇思应用案例-助推ai研究的利器自动化向量vmap",[23],{"type":24,"value":8},"text",{"type":18,"tag":26,"props":27,"children":28},"p",{},[29],{"type":18,"tag":30,"props":31,"children":33},"img",{"alt":7,"src":32},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/5d700c2b128c47a9952a54292058c598.png",[],{"type":18,"tag":26,"props":35,"children":36},{},[37],{"type":18,"tag":30,"props":38,"children":40},{"alt":7,"src":39},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/2ac30a4deabd4287866cd49fb7e6435d.png",[],{"type":18,"tag":26,"props":42,"children":43},{},[44],{"type":18,"tag":30,"props":45,"children":47},{"alt":7,"src":46},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/63aeb3abe69e4fcdb2abd6c87696642c.png",[],{"type":18,"tag":49,"props":50,"children":52},"pre",{"code":51},"conda install mindspore=2.0.0a0 -c mindspore -c conda-forge\n",[53],{"type":18,"tag":54,"props":55,"children":56},"code",{"__ignoreMap":7},[57],{"type":24,"value":51},{"type":18,"tag":26,"props":59,"children":60},{},[61],{"type":24,"value":62},"安装mindvision。",{"type":18,"tag":49,"props":64,"children":66},{"code":65},"pip install mindvision\n",[67],{"type":18,"tag":54,"props":68,"children":69},{"__ignoreMap":7},[70],{"type":24,"value":65},{"type":18,"tag":26,"props":72,"children":73},{},[74],{"type":18,"tag":75,"props":76,"children":77},"strong",{},[78],{"type":24,"value":79},"02",{"type":18,"tag":26,"props":81,"children":82},{},[83],{"type":18,"tag":75,"props":84,"children":85},{},[86],{"type":24,"value":87},"向量化思维",{"type":18,"tag":26,"props":89,"children":90},{},[91],{"type":18,"tag":30,"props":92,"children":94},{"alt":7,"src":93},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/044dc4e4777f4a4d9d4c63e9cd5cbb78.png",[],{"type":18,"tag":26,"props":96,"children":97},{},[98],{"type":18,"tag":30,"props":99,"children":101},{"alt":7,"src":100},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/2626910f0eb841fc96afc32f2c3cf60d.png",[],{"type":18,"tag":26,"props":103,"children":104},{},[105],{"type":18,"tag":30,"props":106,"children":108},{"alt":7,"src":107},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/609b9a8e802945f0917d40f4e83fbee3.png",[],{"type":18,"tag":26,"props":110,"children":111},{},[112],{"type":18,"tag":30,"props":113,"children":115},{"alt":7,"src":114},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/a2ca16d95ea2488fa189266187bbcade.png",[],{"type":18,"tag":26,"props":117,"children":118},{},[119],{"type":18,"tag":30,"props":120,"children":122},{"alt":7,"src":121},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/4a4ddf49112d493682a339ea616339d3.png",[],{"type":18,"tag":26,"props":124,"children":125},{},[126],{"type":18,"tag":30,"props":127,"children":129},{"alt":7,"src":128},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/6fc959eea659476e806018a19f38f4b8.png",[],{"type":18,"tag":26,"props":131,"children":132},{},[133],{"type":18,"tag":30,"props":134,"children":136},{"alt":7,"src":135},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/737e703af8db42c7a5d98f6818160429.png",[],{"type":18,"tag":26,"props":138,"children":139},{},[140],{"type":18,"tag":30,"props":141,"children":143},{"alt":7,"src":142},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/bf805a87df2a42d4882ab97257d699d7.png",[],{"type":18,"tag":26,"props":145,"children":146},{},[147],{"type":18,"tag":30,"props":148,"children":150},{"alt":7,"src":149},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/30ae613d1250478d9c3f88132044d791.png",[],{"type":18,"tag":26,"props":152,"children":153},{},[154],{"type":18,"tag":30,"props":155,"children":157},{"alt":7,"src":156},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/def8c4bf63064c0bbb796017f2ec155b.png",[],{"type":18,"tag":26,"props":159,"children":160},{},[161],{"type":18,"tag":30,"props":162,"children":164},{"alt":7,"src":163},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/2a6dc8f0e548464bb999a8f15c8566ca.png",[],{"type":18,"tag":26,"props":166,"children":167},{},[168],{"type":18,"tag":30,"props":169,"children":171},{"alt":7,"src":170},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/3acfa4e7a11a4dbb9c6cd075969b3b06.png",[],{"type":18,"tag":26,"props":173,"children":174},{},[175],{"type":24,"value":176},"通过这种方式，我们可以实现批量输入在同一个模型上进行训练或推理等功能，与现有网络模型输入支持batch轴输入的区别在于，利用Vmap实现的批处理维度更加灵活，不局限于NCHW等输入格式。",{"type":18,"tag":178,"props":179,"children":181},"h2",{"id":180},"模型集成场景",[182],{"type":18,"tag":75,"props":183,"children":184},{},[185],{"type":24,"value":180},{"type":18,"tag":26,"props":187,"children":188},{},[189],{"type":24,"value":190},"模型集成场景将来自多个模型的预测结果组合在一起，传统的实现方式是通过分别在某些输入上运行各个模型，然后将各自的预测结果组合在一起。假如您正在运行的是具有相同架构的模型，那么您可以借助Vmap将它们进行向量化，从而实现加速效果。",{"type":18,"tag":26,"props":192,"children":193},{},[194],{"type":24,"value":195},"该场景下涉及权重数据的向量化，如果您运行的模型是通过函数式编程形式实现，即权重参数在模型外部定义并通过入参传递给模型操作，那您可以直接通过配置in_axes的方式进行相应的批处理。而MindSpore框架为了提供便捷的模型定义功能，绝大部分nn接口的权重参数都在接口内部定义并初始化，这意味着模型中的权重参数在原始Vmap中无法对权重进行批处理，改造成通过入参传递的函数式实现需要额外工作量。不过您不必担心，MindSpore的vmap接口已经替您优化了该场景。您只需要将运行的多个模型实例以CellList的形式传入给vmap，框架即可自动实现权重参数的批处理。",{"type":18,"tag":26,"props":197,"children":198},{},[199],{"type":24,"value":200},"让我们演示如何使用一组简单的CNN模型来实现模型集成推理和训练。",{"type":18,"tag":49,"props":202,"children":204},{"code":203},"class LeNet5(nn.Cell):\n    \"\"\"\n    LeNet-5网络结构\n    \"\"\"\n    def __init__(self, num_class=10, num_channel=1):\n        super(LeNet5, self).__init__()\n        self.conv1 = nn.Conv2d(num_channel, 6, 5, pad_mode='valid')\n        self.conv2 = nn.Conv2d(6, 16, 5, pad_mode='valid')\n        self.fc1 = nn.Dense(16 * 5 * 5, 120)\n        self.fc2 = nn.Dense(120, 84)\n        self.fc3 = nn.Dense(84, num_class)\n        self.relu = nn.ReLU()\n        self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2)\n        self.flatten = nn.Flatten()\n\n    def construct(self, x):\n        x = self.conv1(x)\n        x = self.relu(x)\n        x = self.max_pool2d(x)\n        x = self.conv2(x)\n        x = self.relu(x)\n        x = self.max_pool2d(x)\n        x = self.flatten(x)\n        x = self.fc1(x)\n        x = self.relu(x)\n        x = self.fc2(x)\n        x = self.relu(x)\n        x = self.fc3(x)\n        return x\n",[205],{"type":18,"tag":54,"props":206,"children":207},{"__ignoreMap":7},[208],{"type":24,"value":203},{"type":18,"tag":26,"props":210,"children":211},{},[212],{"type":24,"value":213},"假设我们正在验证同一模型架构在不同权重参数下的效果，让我们模拟四个已经训练好的模型实例和一份batch大小为16，尺寸为32 x 32的虚拟图像数据集的minibatch。",{"type":18,"tag":49,"props":215,"children":217},{"code":216},"net1 = LeNet5()\nnet2 = LeNet5()\nnet3 = LeNet5()\nnet4 = LeNet5()\n\nminibatch = Tensor(mnp.randn(3, 1, 32, 32), mindspore.float32)\n",[218],{"type":18,"tag":54,"props":219,"children":220},{"__ignoreMap":7},[221],{"type":24,"value":216},{"type":18,"tag":26,"props":223,"children":224},{},[225],{"type":24,"value":226},"相较于利用for循环分别运行各个模型后将预测结果集合到一起，Vmap能够一次运行获得多个模型的预测结果。",{"type":18,"tag":26,"props":228,"children":229},{},[230],{"type":24,"value":231},"注意，由于vmap的实现机制，会对设备运行内存有要求，使用vmap可能会占用更多内存，请用户根据实际场景使用。",{"type":18,"tag":49,"props":233,"children":235},{"code":234},"nets = nn.CellList([net1, net2, net3, net4])\nvmap(nets, in_axes=None)(minibatch)\n",[236],{"type":18,"tag":54,"props":237,"children":238},{"__ignoreMap":7},[239],{"type":24,"value":234},{"type":18,"tag":49,"props":241,"children":243},{"code":242},"Tensor(shape=[4, 3, 10], dtype=Float32, value=\n[[[ 4.66281290e-06, -7.24548045e-06,  8.68147254e-07 ...  1.42438457e-05,  1.49375774e-05, -1.18535736e-05],\n  [ 9.10962353e-06, -5.63606591e-06, -7.06250285e-06 ...  1.68580664e-05,  1.41603141e-05, -3.55220163e-06],\n  [ 1.11184154e-05, -6.08020900e-06, -5.08124231e-06 ...  1.37913748e-05,  1.20597506e-05, -1.01803471e-05]],\n [[ 3.22165624e-06,  6.22022753e-06,  2.60713023e-07 ... -1.53302244e-05,  2.34313102e-05, -4.16413786e-06],\n  [ 2.82950850e-06,  1.54561894e-06,  5.19753303e-06 ... -1.53819674e-05,  1.58681542e-05, -7.10185304e-07],\n  [ 1.77780748e-07,  4.33479636e-06, -1.35376536e-06 ... -1.06113021e-05,  1.58355688e-05, -5.78900153e-06]],\n [[ 6.66864071e-06, -1.99870119e-05, -1.30958688e-05 ...  3.68208202e-06, -9.69678968e-06,  9.59075351e-06],\n  [ 7.99765985e-06, -1.16931469e-05, -1.06589669e-05 ... -1.24687813e-06, -8.65744005e-06,  6.81729716e-06],\n  [ 6.87587362e-06, -1.23972441e-05, -1.05251866e-05 ...  1.44004912e-06, -5.40550172e-06,  6.71799853e-06]],\n [[-3.44783439e-06,  2.32537104e-07, -8.64402864e-06 ...  3.52633970e-06, -6.27670488e-06,  3.27721250e-06],\n  [-6.90392517e-06, -9.97693860e-07, -6.48076320e-06 ...  7.61923275e-07, -2.54563452e-06,  3.08638573e-06],\n  [-3.78440518e-06,  3.93633945e-06, -7.90367903e-06 ...  5.13138957e-07, -4.50420839e-06,  2.13702333e-06]]])\n",[244],{"type":18,"tag":54,"props":245,"children":246},{"__ignoreMap":7},[247],{"type":24,"value":242},{"type":18,"tag":26,"props":249,"children":250},{},[251],{"type":24,"value":252},"又或者，我们期望得到多个模型分别执行不同minibatch数据的预测结果。",{"type":18,"tag":26,"props":254,"children":255},{},[256],{"type":24,"value":257},"模型集成场景下，vmap的第一个入参应为CellList类型，需要确保每个模型的架构完全相同，否则无法保证计算正确性，如果in_axes不为None是需保证模型数量与映射轴索引对应的axis_size一致，以实现一一映射关系。",{"type":18,"tag":49,"props":259,"children":261},{"code":260},"minibatchs = Tensor(mnp.randn(4, 3, 1, 32, 32), mindspore.float32)\nvmap(nets, in_axes=0)(minibatchs)\n",[262],{"type":18,"tag":54,"props":263,"children":264},{"__ignoreMap":7},[265],{"type":24,"value":260},{"type":18,"tag":26,"props":267,"children":268},{},[269],{"type":18,"tag":30,"props":270,"children":272},{"alt":7,"src":271},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/fbf0d0990cdb4635be47e051d9a16963.png",[],{"type":18,"tag":49,"props":274,"children":276},{"code":275},"Tensor(shape=[4, 3, 10], dtype=Float32, value=\n[[[ 6.52808285e-06, -4.15002341e-06, -3.80283609e-06 ...  1.54428089e-05,  1.44425348e-05, -9.00016857e-06],\n  [ 7.39091365e-06, -5.19960076e-06,  3.83916813e-07 ...  1.67857870e-05,  1.80104271e-05, -1.56435199e-05],\n  [ 1.11604741e-05, -7.59019804e-06,  2.54263796e-07 ...  1.21071571e-05,  1.66683039e-05, -1.09967377e-05]],\n [[ 1.48978233e-06,  1.02267529e-06,  1.33801677e-06 ... -1.32894393e-05,  1.36311328e-05, -3.29658405e-06],\n  [ 1.09956818e-06, -5.06103561e-07,  3.04885953e-06 ... -1.76028752e-05,  1.66466998e-05, -1.17290392e-06],\n  [ 2.96090502e-06,  1.87074147e-06,  5.76813818e-06 ... -1.09994007e-05,  1.35614964e-05, -2.19983576e-06]],\n [[ 6.74323928e-06, -1.03955799e-05, -6.92168396e-06 ...  4.88165415e-06, -5.40378596e-06,  3.09346888e-06],\n  [ 7.28906161e-06, -1.34921102e-05, -1.00995640e-05 ...  9.44596650e-07, -6.40979761e-06,  1.26146606e-05],\n  [ 9.43304440e-06, -1.61852931e-05, -1.16265892e-05 ...  5.31926253e-06, -1.28484417e-05,  8.03831313e-07]],\n [[-5.51165886e-06, -1.09487860e-06, -6.07781249e-06 ...  7.51453626e-06, -3.29403338e-06,  3.45475746e-06],\n  [-6.27516283e-06,  1.40756754e-06, -9.18502155e-06 ...  4.16079911e-06, -5.30383022e-06,  5.12517454e-06],\n  [-6.19608954e-06,  5.12868655e-06, -1.00337056e-05 ...  2.93281119e-07, -6.52256404e-06,  3.62988635e-06]]])\n",[277],{"type":18,"tag":54,"props":278,"children":279},{"__ignoreMap":7},[280],{"type":24,"value":275},{"type":18,"tag":26,"props":282,"children":283},{},[284],{"type":24,"value":285},"除了支持模型集成推理外，结合Vmap特性同样能够实现模型集成训练。",{"type":18,"tag":49,"props":287,"children":289},{"code":288},"from mindspore.common.parameter import ParameterTuple\n\nclass TrainOneStepNet(nn.Cell):\n    def __init__(self, net, lr):\n        super(TrainOneStepNet, self).__init__()\n        self.loss_fn = nn.WithLossCell(net, nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean'))\n        self.weight = ParameterTuple(net.trainable_params())\n        self.adam_optim = nn.Adam(self.weight, learning_rate=lr, use_amsgrad=True)\n\n    def construct(self, batch, targets):\n        loss = self.loss_fn(batch, targets)\n        grad_weights = grad(self.loss_fn, grad_position=None, weights=self.weight)(batch, targets)\n        self.adam_optim(grad_weights)\n        return loss\n\ntrain_net1 = TrainOneStepNet(net1, lr=1e-2)\ntrain_net2 = TrainOneStepNet(net2, lr=1e-3)\ntrain_net3 = TrainOneStepNet(net3, lr=2e-3)\ntrain_net4 = TrainOneStepNet(net4, lr=3e-3)\n\ntrain_nets = nn.CellList([train_net1, train_net2, train_net3, train_net4])\nmodel_ensembling_train_one_step = vmap(train_nets)\n\nimages = Tensor(mnp.randn(4, 3, 1, 32, 32), mindspore.float32)\nlabels = Tensor(mnp.randint(1, 10, (4, 3)), mindspore.int32)\n\nfor i in range(1, 11):\n    loss = model_ensembling_train_one_step(images, labels)\n    print(\"Step {} - loss: {}\".format(i, loss))\n\nvmap(nets, in_axes=None)(minibatch)\n",[290],{"type":18,"tag":54,"props":291,"children":292},{"__ignoreMap":7},[293],{"type":24,"value":288},{"type":18,"tag":49,"props":295,"children":297},{"code":296},"Step 1 - loss: [2.3025837 2.3025882 2.3025858 2.3025842]\nStep 2 - loss: [2.260927  2.301028  2.2992857 2.2976868]\nStep 3 - loss: [1.8539654 2.2993202 2.2951114 2.2899477]\nStep 4 - loss: [0.77165794 2.2973287  2.288719   2.2726345 ]\nStep 5 - loss: [0.9397469 2.2948549 2.2777178 2.2313874]\nStep 6 - loss: [0.6747699 2.29158   2.2579656 2.1410708]\nStep 7 - loss: [0.64673084 2.2870557  2.2232006  1.966973  ]\nStep 8 - loss: [1.0506033 2.2806385 2.1645374 1.6848679]\nStep 9 - loss: [0.612196  2.2714498 2.0706694 1.3499321]\nStep 10 - loss: [0.8843982 2.258316  1.9299208 1.1472267]\nTensor(shape=[4, 3, 10], dtype=Float32, value=\n[[[-1.91058636e+01, -1.92182674e+01,  1.06328402e+01 ... -1.87287464e+01, -1.87855473e+01, -2.02504387e+01],\n  [-1.94767399e+01, -1.95909595e+01,  1.08379564e+01 ... -1.90921249e+01, -1.91503220e+01, -2.06434765e+01],\n  [-1.96521702e+01, -1.97674465e+01,  1.09355783e+01 ... -1.92643051e+01, -1.93227654e+01, -2.08293762e+01]],\n [[-4.07293849e-02, -4.27918807e-02,  5.22112176e-02 ... -4.67570126e-02, -3.88025381e-02,  4.88412194e-02],\n  [-3.91553082e-02, -4.11494374e-02,  5.00433967e-02 ... -4.48847115e-02, -3.73134986e-02,  4.68519926e-02],\n  [-3.80369201e-02, -3.99325565e-02,  4.84890938e-02 ... -4.35365662e-02, -3.62745039e-02,  4.54225838e-02]],\n [[-5.08784056e-01, -5.05123973e-01,  5.20882547e-01 ...  4.72596169e-01, -5.00697553e-01, -4.60489392e-01],\n  [-4.80103493e-01, -4.76664037e-01,  4.91507798e-01 ...  4.46062207e-01, -4.72493649e-01, -4.34652239e-01],\n  [-4.81168061e-01, -4.77702975e-01,  4.92583781e-01 ...  4.47029382e-01, -4.73524809e-01, -4.35579300e-01]],\n [[-3.66236401e+00, -3.25362825e+00,  3.51312804e+00 ...  3.77490187e+00, -3.36864424e+00, -3.34358120e+00],\n  [-3.49160767e+00, -3.10209608e+00,  3.34935308e+00 ...  3.59894991e+00, -3.21167707e+00, -3.18782210e+00],\n  [-3.57623625e+00, -3.17717075e+00,  3.43059325e+00 ...  3.68615556e+00, -3.28948307e+00, -3.26504302e+00]]])\n",[298],{"type":18,"tag":54,"props":299,"children":300},{"__ignoreMap":7},[301],{"type":24,"value":296},{"type":18,"tag":26,"props":303,"children":304},{},[305],{"type":24,"value":306},"经过模型集成训练的模型除了可以集成推理之外，仍然可以单独进行推理。",{"type":18,"tag":49,"props":308,"children":310},{"code":309},"net1(minibatch)\n",[311],{"type":18,"tag":54,"props":312,"children":313},{"__ignoreMap":7},[314],{"type":24,"value":309},{"type":18,"tag":26,"props":316,"children":317},{},[318],{"type":18,"tag":30,"props":319,"children":321},{"alt":7,"src":320},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/05/23/69460f90e9d0401492c7439984847427.png",[],{"type":18,"tag":26,"props":323,"children":324},{},[325],{"type":24,"value":326},"往期回顾",{"type":18,"tag":26,"props":328,"children":329},{},[330],{"type":18,"tag":331,"props":332,"children":336},"a",{"href":333,"rel":334},"http://mp.weixin.qq.com/s?__biz=MzkxMTM2MjMzNg==&mid=2247595685&idx=2&sn=09f611bedf722fb488954eb412efdb01&chksm=c11e66eaf669effc022ef15f5cada092b509700a43af5966b3257ef1b5cb980f43d53012467f&scene=21#wechat_redirect",[335],"nofollow",[337],{"type":24,"value":338},"昇思应用案例 | 分布式并行训练基础案例（CPU）",{"type":18,"tag":26,"props":340,"children":341},{},[342],{"type":18,"tag":331,"props":343,"children":346},{"href":344,"rel":345},"http://mp.weixin.qq.com/s?__biz=MzkxMTM2MjMzNg==&mid=2247595341&idx=1&sn=057234e7239c47bfdb48f253ae5ccf23&chksm=c11e6502f669ec14fa5c21bd52b565d4775d45620b0a507bbd4cef467c30706bea47e90c96f0&scene=21#wechat_redirect",[335],[347],{"type":24,"value":348},"昇思应用案例 | 小白都能看得懂得数据变换（Transforms）详情",{"type":18,"tag":26,"props":350,"children":351},{},[352],{"type":18,"tag":331,"props":353,"children":356},{"href":354,"rel":355},"http://mp.weixin.qq.com/s?__biz=MzkxMTM2MjMzNg==&mid=2247594712&idx=1&sn=1ad2dced8eabe180749e74ab2ffe1867&chksm=c11e6297f669eb81a33c1f14f4ea28a530b91bdf833c93323e8db465524fec390c3c1428268b&scene=21#wechat_redirect",[335],[357],{"type":24,"value":358},"昇思应用案例 | FGSM网络对抗攻击，轻松调节模型精度",{"type":18,"tag":26,"props":360,"children":361},{},[362],{"type":18,"tag":331,"props":363,"children":366},{"href":364,"rel":365},"http://mp.weixin.qq.com/s?__biz=MzkxMTM2MjMzNg==&mid=2247594000&idx=1&sn=58054d20cdf29acc98e694a50a148247&chksm=c11e605ff669e949e7e4deefad360efffb9f4d05481bf7ae94d7fd2348c487cc7918996068da&scene=21#wechat_redirect",[335],[367],{"type":24,"value":368},"昇思应用案例 | Colorization实现灰度图像自动着色",{"title":7,"searchDepth":370,"depth":370,"links":371},4,[372],{"id":180,"depth":373,"text":180},2,"markdown","content:technology-blogs:zh:2499.md","content","technology-blogs/zh/2499.md","technology-blogs/zh/2499","md",1776506121912]