概述
“现在的深度学习无非就是堆神经网络模型”这句话既对也不全对,深度学习能够取得如此大的进步在于神经网络的层数增加。但对模型并不是把别人已经做好的模型在自己的机子上跑一下,或者简单堆叠就可以了,而是要有自己的想法产生自己的改进模型。
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、一定要注意各层的输入及输出形状,否则无法运行。
建议:
大家最好都学习自定义层的编写,这样你才能真正编写出自己适用的层,同时对模型有深刻的理解。在阅读别人源码时才有体会。
最后
以上就是干净小虾米为你收集整理的使用keras自定义神经网络层的全部内容,希望文章能够帮你解决使用keras自定义神经网络层所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复