【问题标题】:What is the PyTorch alternative for Keras input_shape, output_shape, get_weights, get_config and summaryKeras input_shape、output_shape、get_weights、get_config 和 summary 的 PyTorch 替代方案是什么
【发布时间】:2019-04-25 23:41:07
【问题描述】:

在 Keras 中,创建模型后,我们可以使用model.input_shapemodel.output_shape 查看其输入和输出形状。对于权重和配置,我们可以分别使用model.get_weights()model.get_config()

PyTorch 有哪些类似的替代品?还有其他我们需要了解的用于检查 PyTorch 模型的函数吗?

为了在 PyTorch 中获取摘要,我们打印模型 print(model),但这提供的信息比 model.summary() 少。 PyTorch 有更好的总结吗?

【问题讨论】:

    标签: keras pytorch


    【解决方案1】:

    pytorch 中没有“model.summary()”方法。您需要使用模型的内置方法和字段。

    例如,我已经自定义了 inception_v3 模型。要获取信息,我需要使用其他许多不同的字段。例如:

    在:

    print(model) # print network architecture
    

    出来

    Inception3(
      (Conv2d_1a_3x3): BasicConv2d(
        (conv): Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), bias=False)
        (bn): BatchNorm2d(32, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)
      )
      (Conv2d_2a_3x3): BasicConv2d(
        (conv): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), bias=False)
        (bn): BatchNorm2d(32, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)
      )
      (Conv2d_2b_3x3): BasicConv2d(
        (conv): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)
      )
      (Conv2d_3b_1x1): BasicConv2d(
        (conv): Conv2d(64, 80, kernel_size=(1, 1), stride=(1, 1), bias=False)
        (bn): BatchNorm2d(80, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)
      )
      (Conv2d_4a_3x3): BasicConv2d(
        (conv): Conv2d(80, 192, kernel_size=(3, 3), stride=(1, 1), bias=False)
       ...
    

    在:

    for i in model.state_dict().keys():
        print(i) 
    #print keys of dict with values of learned weights, bias, parameters
    

    输出:

        Conv2d_1a_3x3.conv.weight
        Conv2d_1a_3x3.bn.weight
        Conv2d_1a_3x3.bn.bias
        Conv2d_1a_3x3.bn.running_mean
        Conv2d_1a_3x3.bn.running_var
        Conv2d_1a_3x3.bn.num_batches_tracked
        Conv2d_2a_3x3.conv.weight
        Conv2d_2a_3x3.bn.weight
        Conv2d_2a_3x3.bn.bias
        Conv2d_2a_3x3.bn.running_mean 
        ...
    

    因此,如果我想在 Conv2d_1a_3x3 获得 CNN 层的权重,我会寻找键“Conv2d_1a_3x3.conv.weight”:

    print("model.save_dict()["Conv2d_1a_3x3.conv.weight"])
    

    输出:

    tensor([[[[-0.2103, -0.3441, -0.0344],
              [-0.1420, -0.2520, -0.0280],
              [ 0.0736,  0.0183,  0.0381]],
    
             [[ 0.1417,  0.1593,  0.0506],
              [ 0.0828,  0.0854,  0.0186],
              [ 0.0283,  0.0144,  0.0508]],
    ...
    

    如果您想查看优化器中使用的超参数:

    optimizer.param_groups
    

    输出:

    [{'dampening': 0,
      'lr': 0.01,
      'momentum': 0.01,
      'nesterov': False,
      'params': [Parameter containing:
       tensor([[[[-0.2103, -0.3441, -0.0344],
                 [-0.1420, -0.2520, -0.0280],
                 [ 0.0736,  0.0183,  0.0381]],
              ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-17
      • 2021-11-13
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多