pytorch转keras

  • Post author:
  • Post category:其他




pytorch与keras的区别




模型输入:


区别 pytorch keras
API torch.tensor

Input

形状 NCHW

NHWC

#pytorch
            #批次, 通道, 高, 宽
a = torch.randn(1,4,160,160)


#keras
#形状和批次分开    
a = Input(shape = (160, 160, 4), batch_size = 1)



卷积:


区别 pytorch keras
API nn.Conv2D

Conv2D

输入通道 参数有输入通道 没有输入通道
padding 任意输入一个值 ‘valid’没填充,’same’有填充
#pytorch
self.conv = Conv2d(in_channels, out_channels, kernel_size, stride, padding=padding, bias=bias)

#keras
output = Conv2D(input.shape[-1] // reduction, kernel = (1,1), padding = "valid", use_bias = False)(output)


反卷积:

区别 pytorch keras
API

nn.ConvTranspose2d

Conv2DTranspose

输入通道 参数有输入通道 没有输入通道
#pytorch
self.dconv = nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride, bias=bias)

#keras
output = Conv2DTranspose(out_channels, kernel_size, stride, use_bias=bias)(input)



上采样:


区别 pytorch keras
API

nn.UpsamplingBilinear2d

需要自定义

#pytorch
                                #缩放因子
self.up = nn.UpsamplingBilinear2d(scale_factor=2)

#keras
import tensorflow.compat.v1 as tf
#需要tf1版本里的resize
def my_upsampling(x,img_w,img_h,method=0):
    """0:双线性差值。1:最近邻居法。2:双三次插值法。3:面积插值法"""
    return tf.image.resize_images(x,(img_w,img_h),0)
                                       #输出宽高
output = Lambda(my_upsampling,arguments={'img_w':input.shape[2] * 2,'img_h':input.shape[1] * 2})(input)



池化:


区别 pytorch keras

nn.AdaptiveAvgPool2d(1)

没有自适应池化,需要利用自定义池化自定义



BatchNormalization:


区别 pytorch keras
API

nn.BatchNorm2d

BatchNormalization

输入 有输入通道 没有输入通道
#pytorch
nn.BatchNorm2d(in_size),

#keras
output = BatchNormalization()(output)



激活:


区别 pytorch keras
API

nn.ReLU

Activation

不同激活函数不同api 不同激活通过输入字符串来表示
#pytorch
self.act = nn.Sigmoid()
self.act = nn.ReLU


#keras
output = Activation("sigmoid")(output)
output = Activation("relu")(output)

不定期更新。。。



版权声明:本文为qq_33499229原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。