"""
可选参数:
- opt.layer_number:层数(e.g. 3)
- opt.layer_paramete:每层参数量 (e.g. [3, 64, 64])
- opt.activation:none, RuLU, etc.
"""
class simpleNet(nn.Module):
"""
定义了一个简单的三层全连接神经网络,每一层都是线性的
"""
def __init__(self, opt):
super(simpleNet, self).__init__()
for i in range(0, opt.layer_number - 1):
exec(f"self.layer{i + 1} = nn.Linear({opt.layer_parameter[i]}, {opt.layer_parameter[i + 1]})")
exec(f"self.layer{opt.layer_number} = nn.Linear({opt.layer_parameter[opt.layer_number - 1]}, 1)")
self.layer_number = opt.layer_number
def forward(self, x):
for i in range(0, self.layer_number):
x = eval("self.layer" + str(i + 1))(x)
return x
class Activation_Net(nn.Module):
"""
在上面的simpleNet的基础上,在每层的输出部分添加了激活函数
"""
def __init__(self, opt):
super(Activation_Net, self).__init__()
for i in range(0, opt.layer_number - 1):
exec(f"self.layer{i + 1} = nn.Sequential(nn.Linear({opt.layer_parameter[i]}, {opt.layer_parameter[i + 1]}), nn.{opt.activation}(True))")
exec(f"self.layer{opt.layer_number} = nn.Sequential(nn.Linear({opt.layer_parameter[opt.layer_number - 1]}, 1))")
self.layer_number = opt.layer_number
def forward(self, x):
for i in range(0, self.layer_number):
x = eval("self.layer" + str(i + 1))(x)
return x