【神经网络】python 函数参数解析

ArgumentParser类:

prog - 程序的名字(默认:sys.argv[0])
usage - 描述程序用法的字符串(默认:从解析器的参数生成)
description - 参数帮助信息之前的文本(默认:空)
epilog - 参数帮助信息之后的文本(默认:空)
parents - ArgumentParser 对象的一个列表,这些对象的参数应该包括进去
formatter_class - 定制化帮助信息的类
prefix_chars - 可选参数的前缀字符集(默认:‘-‘)
fromfile_prefix_chars - 额外的参数应该读取的文件的前缀字符集(默认:None)
argument_default - 参数的全局默认值(默认:None)
conflict_handler - 解决冲突的可选参数的策略(通常没有必要)
add_help - 给解析器添加-h/–help 选项(默认:True)

kwargs:传入key=value是存储的字典

例子:
def foo(*args, **kwargs):
    print 'args = ', args
    print 'kwargs = ', kwargs
    print '---------------------------------------'
 
if __name__ == '__main__':
    foo(1,2,3,4)
    foo(a=1,b=2,c=3)
    foo(1,2,3,4, a=1,b=2,c=3)
    foo('a', 1, None, a=1, b='2', c=3)

输出结果如下:
args =  (1, 2, 3, 4) 
kwargs =  {} 
--------------------------------------- 
args =  () 
kwargs =  {'a': 1, 'c': 3, 'b': 2} 
--------------------------------------- 
args =  (1, 2, 3, 4) 
kwargs =  {'a': 1, 'c': 3, 'b': 2} 
--------------------------------------- 
args =  ('a', 1, None) 
kwargs =  {'a': 1, 'c': 3, 'b': '2'} 
---------------------------------------
可以看到,这两个是python中的可变参数。*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前

参考:博客

super

1、简介

对于super(B, self).__init__()的理解:super(B, self)首先找到B的父类(就是类A),然后把类B的对象self转换为类A的对象,然后“被转换”的类A对象调用自己的__init__函数

2、例子:
class A(object):    # A must be new-style class
 def __init__(self):
  print "enter A"
  print "leave A"
class B(C):     # A --> C
 def __init__(self):
  print "enter B"
  super(B, self).__init__()
  print "leave B"

>>> b = B()
 enter B
 enter A
 leave A
 leave B
参考:https://blog.csdn.net/JohnsonGuo/article/details/585193

Conv2d

in_channels (int): 输入通道
out_channels (int): 输出通道
kernel_size (int or tuple): 卷积核(滤波器)的大小 
stride (int or tuple, optional): 步长 
padding (int or tuple, optional): 周围补零,Default: 0 
dilation (int or tuple, optional): Spacing between kernel elements. Default: 1 
groups (int, optional): Number of blocked connections from input channels to output channels. Default: 1 
bias (bool, optional): If True, adds a learnable bias to the output. Default: True:偏差

说明:

1、 in_channels = X(x>1) , out_channels = N:有N*X个filter(N组filters,每组X个)对输入进行滤波。即每次有一组里X个filter对原X个channels分别进行滤波最后相加输出一个结果,最后输出N个结果即feature map。

2、卷积或池化后的节点数计算公式: out_channels = int((in_channels + 2*padding - filter_w)/stride ) + 1

Linear(全连接层)

Linear 是module的子类,表示一种线性变换。
参数:
in_features - 每个输入样本的大小
out_features - 每个输出样本的大小
bias - 若设置为False,这层不会学习偏置。默认值:True

例如:m = nn.Linear(20, 30),学习20*30=600个权重(参数)。每20个对应一个输出

猜你喜欢

转载自blog.csdn.net/Always_ease/article/details/83056065