做网站就是做点击率,传媒公司网站建设,网站建设水平,安阳贴吧官网Cell作为神经网络构造的基础单元#xff0c;与神经网络层(Layer)的概念相对应#xff0c;对Tensor计算操作的抽象封装#xff0c;能够更准确清晰地对神经网络结构进行表示。除了基础的Tensor计算流程定义外#xff0c;神经网络层还包含了参数管理、状态管理等功能。而参数(…Cell作为神经网络构造的基础单元与神经网络层(Layer)的概念相对应对Tensor计算操作的抽象封装能够更准确清晰地对神经网络结构进行表示。除了基础的Tensor计算流程定义外神经网络层还包含了参数管理、状态管理等功能。而参数(Parameter)是神经网络训练的核心通常作为神经网络层的内部成员变量。本节我们将系统介绍参数、神经网络层以及其相关使用方法。
Parameter
参数(Parameter)是一类特殊的Tensor是指在模型训练过程中可以对其值进行更新的变量。MindSpore提供mindspore.Parameter类进行Parameter的构造。为了对不同用途的Parameter进行区分下面对两种不同类别的Parameter进行定义
可训练参数。在模型训练过程中根据反向传播算法求得梯度后进行更新的Tensor此时需要将required_grad设置为True。不可训练参数。不参与反向传播但需要更新值的Tensor如BatchNorm中的mean和var变量此时需要将requires_grad设置为False。 在Cell的__init__方法中我们定义了w和b两个Parameter并配置name进行命名空间管理。在construct方法中使用self.attr直接调用参与Tensor运算。
获取Parameter
在使用CellParameter构造神经网络层后我们可以使用多种方法来获取Cell管理的Parameter。
获取单个参数
单独获取某个特定参数直接调用Python类的成员变量即可。 可使用Cell.trainable_params方法获取可训练参数通常在配置优化器时需调用此接口。
使用Cell.get_parameters()方法可获取所有参数此时会返回一个Python迭代器
或者可以调用Cell.parameters_and_names返回参数名称及参数。 修改Parameter
直接修改参数值
Parameter是一种特殊的Tensor因此可以使用Tensor索引修改的方式对其值进行修改。
可调用Parameter.set_data方法使用相同Shape的Tensor对Parameter进行覆盖。该方法常用于使用Initializer进行Cell遍历初始化。 运行时修改参数值
参数的主要作用为模型训练时对其值进行更新在反向传播获得梯度后或不可训练参数需要进行更新都涉及到运行时参数修改。由于MindSpore的使用静态图加速编译设计此时需要使用mindspore.ops.assign接口对参数进行赋值。该方法常用于自定义优化器场景。下面是一个简单的运行时修改参数值样例
import mindspore as ms ms.jit
def modify_parameter(): b_hat ms.Tensor([7, 8, 9]) ops.assign(net.b, b_hat) return True modify_parameter()
print(net.b.asnumpy())
Parameter Tuple
变量元组ParameterTuple用于保存多个Parameter继承于元组tuple提供克隆功能。
如下示例提供ParameterTuple创建方法