【问题标题】:Are those Keras and PyTorch snippets equivalent?那些 Keras 和 PyTorch 片段是否等效?
【发布时间】:2022-06-30 00:15:28
【问题描述】:

我想知道我是否成功地将PyTorch中的以下定义翻译成Keras

PyTorch 中,定义了以下多层感知器:

from torch import nn
hidden = 128
def mlp(size_in, size_out, act=nn.ReLU):
    return nn.Sequential(
        nn.Linear(size_in, hidden),
        act(),
        nn.Linear(hidden, hidden),
        act(),
        nn.Linear(hidden, hidden),
        act(),
        nn.Linear(hidden, size_out),
    )

我的翻译是

从张量流导入 keras

from keras import layers

hidden = 128

def mlp(size_in, size_out, act=keras.layers.ReLU):
    return keras.Sequential(
        [
            layers.Dense(hidden, activation=None, name="layer1", input_shape=(size_in, 1)),
            act(),
            layers.Dense(hidden, activation=None, name="layer2", input_shape=(hidden, 1)),
            act(),
            layers.Dense(hidden, activation=None, name="layer3", input_shape=(hidden, 1)),
            act(),
            layers.Dense(size_out, activation=None, name="layer4", input_shape=(hidden, 1))
        ])

我对输入/输出参数特别困惑,因为这似乎是 tensorflow 和 PyTorch 不同的地方。

来自documentation

当一个流行的 kwarg input_shape 被传递时,keras 将创建一个 在当前层之前插入的输入层。这个可以治疗 相当于显式定义一个 InputLayer。

那么,我做对了吗?

非常感谢!

【问题讨论】:

    标签: tensorflow keras pytorch


    【解决方案1】:

    在 Keras 中,您应该为第一层提供input_shape,或者使用layers.Input 层。这是必需的,因为 Keras 会预先编译模型,并且在这样做时它需要具有输入形状,而 PyTorch 在运行时这样做。

    def keras_mlp(size_in, size_out, act=layers.ReLU):
        return keras.Sequential([layers.Input(shape=(size_in,)),
                                 layers.Dense(hidden, name='layer1'),
                                 act(),
                                 layers.Dense(hidden, name='layer2'),
                                 act(),
                                 layers.Dense(hidden, name='layer3'),
                                 act(),
                                 layers.Dense(size_out, name='layer4')])
    
    def pytorch_mlp(size_in, size_out, act=nn.ReLU):
        return nn.Sequential(nn.Linear(size_in, hidden),
                             act(),
                             nn.Linear(hidden, hidden),
                             act(),
                             nn.Linear(hidden, hidden),
                             act(),
                             nn.Linear(hidden, size_out))
    

    你可以比较他们的总结。

    • 对于 Keras:

      >>> keras_mlp(10, 5).summary()
      Model: "sequential_2"
      _________________________________________________________________
       Layer (type)                Output Shape              Param #   
      =================================================================
       layer1 (Dense)              (None, 128)               1408      
      
       re_lu_6 (ReLU)              (None, 128)               0         
      
       layer2 (Dense)              (None, 128)               16512     
      
       re_lu_7 (ReLU)              (None, 128)               0         
      
       layer3 (Dense)              (None, 128)               16512     
      
       re_lu_8 (ReLU)              (None, 128)               0         
      
       layer4 (Dense)              (None, 5)                 645       
      
      =================================================================
      Total params: 35,077
      Trainable params: 35,077
      Non-trainable params: 0
      _________________________________________________________________
      
    • 对于 PyTorch:

      >>> summary(pytorch_mlp(10, 5), (1,10))
      ============================================================================
      Layer (type:depth-idx)                   Output Shape              Param #
      ============================================================================
      Sequential                               [1, 5]                    --
      ├─Linear: 1-1                            [1, 128]                  1,408
      ├─ReLU: 1-2                              [1, 128]                  --
      ├─Linear: 1-3                            [1, 128]                  16,512
      ├─ReLU: 1-4                              [1, 128]                  --
      ├─Linear: 1-5                            [1, 128]                  16,512
      ├─ReLU: 1-6                              [1, 128]                  --
      ├─Linear: 1-7                            [1, 5]                    645
      ============================================================================
      Total params: 35,077
      Trainable params: 35,077
      Non-trainable params: 0
      Total mult-adds (M): 0.04
      ============================================================================
      Input size (MB): 0.00
      Forward/backward pass size (MB): 0.00
      Params size (MB): 0.14
      Estimated Total Size (MB): 0.14
      ============================================================================
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 2020-02-01
      相关资源
      最近更新 更多