您的位置:首页 > 健康 > 美食 > 中国网站排名榜_网店美工与视觉设计_常用的网络推广手段有哪些_刷链接浏览量网站

中国网站排名榜_网店美工与视觉设计_常用的网络推广手段有哪些_刷链接浏览量网站

2024/10/5 20:25:25 来源:https://blog.csdn.net/weixin_42553583/article/details/142478518  浏览:    关键词:中国网站排名榜_网店美工与视觉设计_常用的网络推广手段有哪些_刷链接浏览量网站
中国网站排名榜_网店美工与视觉设计_常用的网络推广手段有哪些_刷链接浏览量网站

大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。
技术上主攻前端开发、鸿蒙开发和AI算法研究。
努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧

使用内置参数初始化

MindSpore提供了多种网络参数初始化的方式,并在部分算子中封装了参数初始化的功能。本节以Conv2d为例,分别介绍如何使用Initializer子类,字符串进行参数初始化。

Initializer初始化

Initializer是MindSpore内置的参数初始化基类,所有内置参数初始化方法均继承该类。mindspore.nn中提供的神经网络层封装均提供weight_init、bias_init等入参,可以直接使用实例化的Initializer进行参数初始化。样例如下:

import numpy as np
import mindspore.nn as nn
import mindspore as ms
from mindspore.common.initializer import Normal, initializerinput_data = ms.Tensor(np.ones([1, 3, 16, 50], dtype=np.float32))
# 卷积层,输入通道为3,输出通道为64,卷积核大小为3*3,权重参数使用正态分布生成的随机数
net = nn.Conv2d(3, 64, 3, weight_init=Normal(0.2))
# 网络输出
output = net(input_data)

字符串初始化

除使用实例化的Initializer外,MindSpore也提供了参数初始化简易方法,即使用参数初始化方法名称的字符串。此方法使用Initializer的默认参数进行初始化。样例如下:

import numpy as np
import mindspore.nn as nn
import mindspore as msnet = nn.Conv2d(3, 64, 3, weight_init='normal')
output = net(input_data)

自定义参数初始化

通常情况下,MindSpore提供的默认参数初始化可以满足常用神经网络层的初始化需求,在遇到需要自定义的参数初始化方法时,可以继承Initializer自定义参数初始化方法。下面以XavierNormal为例介绍自定义参数初始化方法:

import math
import numpy as np
from mindspore.common.initializer import Initializerdef _calculate_fan_in_and_fan_out(arr):# 计算fan_in和fan_out。fan_in是 `arr` 中输入单元的数量,fan_out是 `arr` 中输出单元的数量。shape = arr.shapedimensions = len(shape)if dimensions < 2:raise ValueError("'fan_in' and 'fan_out' can not be computed for arr with fewer than"" 2 dimensions, but got dimensions {}.".format(dimensions))if dimensions == 2:  # Linearfan_in = shape[1]fan_out = shape[0]else:num_input_fmaps = shape[1]num_output_fmaps = shape[0]receptive_field_size = 1for i in range(2, dimensions):receptive_field_size *= shape[i]fan_in = num_input_fmaps * receptive_field_sizefan_out = num_output_fmaps * receptive_field_sizereturn fan_in, fan_outclass XavierNormal(Initializer):def __init__(self, gain=1):super().__init__()# 配置初始化所需要的参数self.gain = gaindef _initialize(self, arr): # arr为需要初始化的Tensorfan_in, fan_out = _calculate_fan_in_and_fan_out(arr) # 计算fan_in, fan_out值std = self.gain * math.sqrt(2.0 / float(fan_in + fan_out)) # 根据公式计算std值data = np.random.normal(0, std, arr.shape) # 使用numpy构造初始化好的ndarrayarr[:] = data[:] # 将初始化好的ndarray赋值到arr

完成自定义初始化方法后,我们可以像内置初始化方法一样进行调用:

net = nn.Conv2d(3, 64, 3, weight_init=XavierNormal())
# 网络输出
output = net(input_data)

Cell遍历初始化

除了使用weight_init, bias_init等mindspore.nn接口提供的入参外,我们也习惯于先构造完整神经网络,然后对weight、bias等参数进行统一管理。此时需要先构造网络并实例化,然后对Cell进行遍历,并对参数进行赋值。下面是一个简单的样例:

for name, param in net.parameters_and_names():if 'weight' in name:param.set_data(initializer(Normal(), param.shape, param.dtype))if 'bias' in name:param.set_data(initializer('zeros', param.shape, param.dtype))

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com