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 版权协议,转载请附上原文出处链接和本声明。