【问题标题】:MXNet Gluon - programmatically accessing neural net layer dimensions?MXNet Gluon - 以编程方式访问神经网络层尺寸?
【发布时间】:2019-07-05 14:09:30
【问题描述】:

让我们从在 MXNet Gluon 中创建一个非常基本的深度神经网络开始(灵感来自 this tutorial):

import mxnet as mx
from mxnet import gluon

ctx = mx.cpu()

net = gluon.nn.Sequential()
with net.name_scope():
    net.add(gluon.nn.Conv2D(channels=20, kernel_size=5, activation='relu'))
    net.add(gluon.nn.MaxPool2D(pool_size=2, strides=2))

现在,如果我们想打印出图层的尺寸,我们所要做的就是......

print(net[0])
  # prints: Conv2D(None -> 20, kernel_size=(5, 5), stride=(1, 1), Activation(relu))

print(net[1])
  # prints: MaxPool2D(size=(2, 2), stride=(2, 2), padding=(0, 0), ceil_mode=False)

但是,如果我们想要以编程方式检查paddingnet[1],而不是将其打印出来,该怎么办?

  • 当我尝试net[1].padding 时,我收到错误AttributeError: 'MaxPool2D' object has no attribute 'padding'
  • 当我尝试net[1]['padding'] 时,我收到错误TypeError: 'MaxPool2D' object is not subscriptable

那么,在 MXNet Gluon 中以编程方式访问神经网络层维度的正确方法是什么?

【问题讨论】:

    标签: python neural-network mxnet


    【解决方案1】:

    print(net[1]._kwargs["pad"])

    尝试从 kwargs 字典中获取它们。在this source 查找其他密钥。

    This 是代码的 Colab 链接。

    其他键是kernel 表示内核大小,stride 表示步幅,.

    获取所有键和值:

    for k, v in net[1]._kwargs.items():
        print(k, v)
    

    【讨论】:

    • 1.在我的问题的打印输出中,它是padding。那么,为什么是_kwargs["pad"] 而不是_kwargs["padding"]
    • 2.查看字典中所有项目的正确方法是什么? (例如垫,步幅,...)
    • 1.这也是我的反应。但是,他们是这样编程的。确切的代码是if self._kwargs['pad'] != (0,) * len_kernel_size: s += ', padding={pad}'
    • 对于 2 我已经更新了我的答案。 dict.items() 为循环键和值提供了一个很好的接口。
    • 有道理!非常感谢您的帮助!!
    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 2011-03-28
    • 2016-09-02
    • 2011-06-02
    • 2017-02-15
    • 2012-09-22
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多