<强> 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动态网络以及权重共享实例