一种参数、层数等可选的全连接网络构建方法(netWork.py)


"""
可选参数:
	- 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值