如何在一个图层模块中打包几个keras图层?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在一个图层模块中打包几个keras图层?相关的知识,希望对你有一定的参考价值。

我必须从pytorch切换到keras,在pytorch中,我可以使用以下代码创建类似模块的层:

from pytorch import nn

class up(nn.Module):
def __init__(self, in_ch, out_ch):
    super(up, self).__init__()
    self.up = nn.Upsample(scale_factor=2)
    self.conv = nn.Conv2D(in_ch, out_ch)
    # !!!! here two layers packaged in one
def forward(self, x1, x2):
    x1 = self.up(x1)
    x = t.cat([x2, x1], dim=1)
    x = self.conv(x)
    return x

如何在keras中以类似模块的方式组织代码?

答案

想通了一种方法就是做功能:

def double_conv(var1, input):
    x = k.layers.Conv2d(some_parameters) (input)
    x = k.layers.Conv2d(some_parameters) (x)
    x = k.layers.MaxPooling2d(some_parameters) (x)
    return x

但还有更多的“kerasic”方式呢?


编辑这是我想要使用像Keras层的功能,但如果有人会找到更好的方法来组织代码,那么我会欢迎任何想法

def conv_bn_relu(filters, kernel=(3,3)):
    def inside(x):
        x = Conv2D(filters, kernel, padding='same') (x)
        x = BatchNormalization() (x)
        x = Activation('relu') (x)
        return x
    return inside

# usage:
x = conv_bn_relu(params) (x)

EDIT2 你甚至可以在类似CamelCase中欺骗和命名这个函数,所以看起来像创建像层一样的Keras

def ConvBnRelu(filters, kernel=(3,3)):
    def inside(x):
        x = Conv2D(filters, kernel, padding='same') (x)
        x = BatchNormalization() (x)
        x = Activation('relu') (x)
        return x
    return inside

# usage:
x = ConvBnRelu(params) (x)

但可能第二种解决方案会受到批评

以上是关于如何在一个图层模块中打包几个keras图层?的主要内容,如果未能解决你的问题,请参考以下文章

Keras:如何在顺序模型中获取图层形状

如何在keras中通过numpy数组初始化图层

如何在 Keras 中剪辑图层返回的值?

Keras 2:在“合并”图层中使用lambda函数

Keras - 所有图层名称都应该是唯一的

在 Keras 中,如何获取与模型中包含的“模型”对象关联的图层名称?