Python初学者,了解一些代码

blu*_*sky 8 python numpy

这是我想要了解的神经网络神经元的Python表示

class Network(object):

    def __init__(self, sizes):
        self.num_layers = len(sizes)
        self.sizes = sizes
        self.biases = [np.random.randn(y, 1) for y in sizes[1:]]
        self.weights = [np.random.randn(y, x) 
                        for x, y in zip(sizes[:-1], sizes[1:])]
Run Code Online (Sandbox Code Playgroud)

这是我目前的理解:

  • self.num_layers = len(sizes):返回大小的项目数
  • self.sizes = sizes:将自我实例大小分配给函数参数大小
  • self.biases = sizes:从标准正态分布生成一个元素数组(表示为np.random.randn(y, 1))

以下行计算是什么?

self.weights = [np.random.randn(y, x)
    for x, y in zip(sizes[:-1], sizes[1:])]
Run Code Online (Sandbox Code Playgroud)

我是Python的新手.这个代码可以在Python shell中使用,这样我可以通过单独调用每一行来获得更好的理解吗?

Mar*_*ers 7

zip()函数将每个可迭代的元素配对; zip('foo', 'bar')例如,会产生[('f', 'b'), ('o', 'a'), ('o', 'r')]; 两个字符串中的每个元素已经配对成三个新元组.

zip(sizes[:-1], sizes[1:])然后,sizes使用下一个元素在序列中创建元素对,因为除了last(sizes[:-1])之外的所有元素都将除了first(sizes[1:])之外的所有元素配对.这将第一和第二元素组合在一起,然后将第二和第三元素组合在一起,一直到最后两个元素.

对于每个这样的对,使用列表理解产生随机样本.因此,对于每x, y对,生成新的2维numpy矩阵,其中随机值划分为y行和x列.

请注意,该biases值仅使用sizes[1:]除第一个之外的所有值,y为每个此类大小生成1个矩阵.

这些概念的快速演示:

>>> zip('foo', 'bar')
[('f', 'b'), ('o', 'a'), ('o', 'r')]
>>> zip('foo', 'bar', 'baz')  # you can add more sequences
[('f', 'b', 'b'), ('o', 'a', 'a'), ('o', 'r', 'z')]
>>> sizes = [5, 12, 18, 23, 42]
>>> zip(sizes[:-1], sizes[1:])  # a sliding window of pairs
[(5, 12), (12, 18), (18, 23), (23, 42)]
# 0, 1 ..  1,  2 ..  2,  3 ..  3,  4   element indices into sizes
>>> 
Run Code Online (Sandbox Code Playgroud)