pytorch动态网络以及权重共享实例

  

<强> pytorch动态网络+权值共享

  

pytorch以动态图著称,下面以一个栗子来实现动态网络和权值共享技术:

        # - * -编码:utf - 8 - *   进口随机   进口火炬         类DynamicNet (torch.nn.Module):   def __init__(自我,D_in H, D_out):   ”“”   这里构造了几个向前传播过程中用到的线性函数   ”“”   超级(DynamicNet自我). __init__ ()   自我。input_linear=torch.nn。线性(D_in H)   自我。middle_linear=torch.nn。线性(H, H)   自我。output_linear=torch.nn。线性(H, D_out)      def向前(自我,x):   ”“”   对于模型的传球前进,我们随机选择0,1,2,3   和重用多次计算的middle_linear模块隐藏层   表示。      因为每个提出通过构建一个动态的计算图表,我们可以使用正常   Python控制流操作符像循环或条件语句   定义模型的传球前进。      这里我们也看到它重用相同的模块很多是完全安全的   定义一个计算图的时候。这是一个重大的改进,从Lua   火炬,每个模块只可以使用一次。   这里中间层每次向前过程中都是随机添加0 - 3层,而且中间层都是使用的同一个线性层,这样计算时,权值也是用的同一个。   ”“”   h_relu=self.input_linear (x) .clamp (min=0)   _的范围(随机的。3)randint (0):   h_relu=self.middle_linear (h_relu) .clamp (min=0)   y_pred=self.output_linear (h_relu)   返回y_pred         # N是批大小;D_in输入维度;   # H是隐藏的维度;D_out输出维度。   N, D_in H, D_out=64, 1000, 100, 10      #创建随机张量来控制输入和输出   x=火炬。D_in randn (N)   y=火炬。D_out randn (N)      #构造我们的模型实例化上面定义的类   模型=DynamicNet (D_in H, D_out)      #构造我们的损失函数和一个优化器。培训这个奇怪的模型   #香草随机梯度下降法是困难的,所以我们使用的势头   标准=torch.nn.MSELoss(减少='和')   优化器=torch.optim.SGD (model.parameters (), lr=1的军医,动量=0.9)   t的范围(500):   #前进传球:计算y通过x的预测模型   y_pred模型(x)=#计算和打印的损失   损失=标准(y_pred, y)   打印(t, loss.item ())      #零梯度,执行一个向后传递,并更新权重。   optimizer.zero_grad ()   loss.backward ()   optimizer.step ()   之前      

这个程序实际上是一种RNN结构,在执行过程中动态的构建计算图

  

引用:Pytorch文档。

  

以上这篇pytorch动态网络以及权重共享实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

pytorch动态网络以及权重共享实例