使用keras自定义神经网络层

        “现在的深度学习无非就是堆神经网络模型”这句话既对也不全对,深度学习能够取得如此大的进步在于神经网络的层数增加。但对模型并不是把别人已经做好的模型在自己的机子上跑一下,或者简单堆叠就可以了,而是要有自己的想法产生自己的改进模型。
        keras提供了自定义层的编程范式,但是很多书都没有介绍,可能是一般的应用用不到。另一方面效果不一定好,需要有一定的理论功底才能设计新的模型。手头刚好需要设计一个自定义层模型,现将方法记录如下。

编程范式
下面展示一些 `内联代码片`。
# 自定义层
#自定义层继承自keras.engine.topology的Layer类
#自定义Layer中需要定义至少三个函数__init__、build、call、如果返回形状发生了改变需要定义compute_output_shape层
class MyLayer(Layer):
	#__init__定义了需要初始化的参数
    def __init__(self, activation = None, **kwargs):
        self.activation = activation
        super(interActivate, self).__init__(**kwargs)
    #build函数定义了权重等值
    def build(self, input_shape):
        self.shape = input_shape
        self.w = self.add_weight(name = "w",shape = (input_shape[0], input_shape[1]),                                initializer="normal",trainable=True)
        super(interActivate, self).build(input_shape)
	
	#call函数定义了具体的计算过程,x为输入值(一般为上一层计算结果)
    def call(self, x):
        front_tanh = K.tanh(x)   
	    return front_tanh

    #注意:如果输出形状不变,则不需要;如果输出的形状发生改变,此处一定要标明
    def compute_output_shape(self, input_shape):
        return (input_shape[0],165,165)
注意

1、在主函数中尽量不要用keras.backend的各种操作,而应该将其封装为层;
2、输入一般都是单一输入,我暂时还不知道如何读取多个输入。
3、一定要注意各层的输入及输出形状,否则无法运行。

建议:

大家最好都学习自定义层的编写,这样你才能真正编写出自己适用的层,同时对模型有深刻的理解。在阅读别人源码时才有体会。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值