首页 > 解决方案 > 如何将 PyTorch 循环块转换为 Keras equvalet

问题描述

我正在测试几种语义分割架构,并遇到了我想尝试的 PyTorch 实现。我的问题是我没有使用 PyTorch 的经验,因此很难将以下代码片段转换为 Keras。

class Recurrent_block(nn.Module):
    def __init__(self,ch_out,t=2):
        super(Recurrent_block,self).__init__()
        self.t = t
        self.ch_out = ch_out
        self.conv = nn.Sequential(
            nn.Conv2d(ch_out,ch_out,kernel_size=3,stride=1,padding=1,bias=True),
            nn.BatchNorm2d(ch_out),
            nn.ReLU(inplace=True)
        )

    def forward(self,x):
        for i in range(self.t):

            if i==0:
                x1 = self.conv(x)

            x1 = self.conv(x+x1)
        return x1

标签: keraspytorch

解决方案


以下代码片段是否等效?

from keras.layers import *

def single_conv(filters):
    def layer(input):
        x = Conv2D(filters=filters, kernel_size=3, strides=1, padding='same')(input)
        x = BatchNormalization()(x)
        x = ReLU()(x)
        return x
    return layer

def recurrent_block(filters, t=2):
    def layer(input):
        for i in range(t):
            if i == 0:
                x1 = single_conv(filters)(input)
            add = Add()([input, x1])
            x1 = single_conv()(add)
        return x1
    return layer


推荐阅读