2024年最全Maxout网络学习_maxout_mlp,由浅入深

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

(1) 以前MLP的方法。我们要计算第i+1层,那个神经元的激活值的时候,传统的MLP计算公式就是:

z=W\*X+b
out=f(z)
//其中f就是我们所谓的激活函数,比如sigmod,relu,tanh等。

(2)Maxout的方法。如果我们设置maxout的参数k=5,maxout层如下所示:
在这里插入图片描述
相当于在每个输出神经元前面又多了一层。这一层有5个神经元,此时maxout网络的输出计算公式为:

z1=w1\*x+b1

z2=w2\*x+b2

z3=w3\*x+b3

z4=w4\*x+b4

z5=w5\*x+b5

out=max(z1,z2,z3,z4,z5)
//所以这就是为什么采用maxout的时候,参数个数成k倍增加的原因。本来我们只需要一组参数就够了,采用maxout后,就需要有k组参数。

2. keras源码

ok,为了学习maxout源码的实现过程,我这边引用keras的源码maxout的实现,进行讲解。keras的网站为:http://keras.io/ 。项目源码网站为:https://github.com/fchollet/keras。下面是keras关于maxout网络层的实现函数:

#maxout 网络层类的定义
class MaxoutDense(Layer):
    # 网络输入数据矩阵大小为(nb\_samples, input\_dim)
    # 网络输出数据矩阵大小为(nb\_samples, output\_dim)
    input_ndim = 2
   #nb\_feature就是我们前面说的k的个数了,这个是maxout层特有的参数
    def \_\_init\_\_(self, output_dim, nb_feature=4,
                 init='glorot\_uniform', weights=None,
                 W_regularizer=None, b_regularizer=None, activity_regularizer=None,
                 W_constraint=None, b_constraint=None, input_dim=None, \*\*kwargs):
        self.output_dim = output_dim
        self.nb_feature = nb_feature
        self.init = initializations.get(init)
 
        self.W_regularizer = regularizers.get(W_regularizer)
        self.b_regularizer = regularizers.get(b_regularizer)
        self.activity_regularizer = regularizers.get(activity_regularizer)
 
        self.W_constraint = constraints.get(W_constraint)
        self.b_constraint = constraints.get(b_constraint)
        self.constraints = [self.W_constraint, self.b_constraint]
 
        self.initial_weights = weights
        self.input_dim = input_dim
        if self.input_dim:
            kwargs['input\_shape'] = (self.input_dim,)
        self.input = K.placeholder(ndim=2)
        super(MaxoutDense, self).__init__(\*\*kwargs)
    #参数初始化部分
    def build(self):
        input_dim = self.input_shape[1]
 
        self.W = self.init((self.nb_feature, input_dim, self.output_dim))#nb\_feature是我们上面说的k。
        self.b = K.zeros((self.nb_feature, self.output_dim))
 
        self.params = [self.W, self.b]
        self.regularizers = []
 
        if self.W_regularizer:
            self.W_regularizer.set_param(self.W)
            self.regularizers.append(self.W_regularizer)
 
        if self.b_regularizer:
            self.b_regularizer.set_param(self.b)
            self.regularizers.append(self.b_regularizer)
 
        if self.activity_regularizer:
            self.activity_regularizer.set_layer(self)
            self.regularizers.append(self.activity_regularizer)
 
        if self.initial_weights is not None:
            self.set_weights(self.initial_weights)
            del self.initial_weights
 
    def get\_output(self, train=False):
        X = self.get_input(train)#需要切记这个x的大小是(nsamples,input\_num) 
        # -- don't need activation since it's just linear.
        output = K.max(K.dot(X, self.W) + self.b, axis=1)#maxout激活函数
        return output

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

ics/618668825)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值