1、在模型前向传播时,可以多次重用同一个模块实现权重共享。
2、用python循环语句或条件语句在每个前向传播时构建一个动态计算图,所以下面这个模型是一个动态网络(动态控制流程)
import torch
import torch.nn as nn
import random
import matplotlib.pyplot as plt
# 绘制loss曲线
def plot_curve(data):
fig = plt.figure()
plt.plot(range(len(data)), data, color='blue')
plt.legend(['value'], loc='upper right')
plt.xlabel('step')
plt.ylabel('value')
plt.show()
class DynamicNet(nn.Module):
def __init__(self, D_in, H, D_out):
super(DynamicNet, self).__init__()
self.input_linear = nn.Linear(D_in, H)
self.middle_linear = nn.Linear(H, H)
self.output_linear = nn.Linear(H, D_out)
def forward(self, x):
h_relu = self.input_linear(x).clamp(min=0)
# 重复利用Middle linear模块
for _ in range(random.randint(0, 3)):
h_relu = self.middle_linear(h_relu).clamp(min=