这是我试图理解的神经网络神经元的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:])]

这是我目前的理解:
  • 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:])]
    

    我是Python的新手。可以在Python Shell中使用此代码,这样我可以通过分别调用每一行来获得更好的理解?

    最佳答案

    zip() function将每个可迭代元素配对;例如,zip('foo', 'bar')将产生[('f', 'b'), ('o', 'a'), ('o', 'r')];两个字符串中的每个元素都已配对为三个新的元组。

    然后,zip(sizes[:-1], sizes[1:])在序列sizes中与下一个元素创建成对的元素,因为您将除最后一个(sizes[:-1])之外的所有元素与除第一个(sizes[1:])之外的所有元素配对。这将第一个和第二个元素配对在一起,然后将第二个和第三个元素配对在一起,一直到最后两个元素。

    对于每个这样的对,使用list comprehension生成一个随机样本。因此,对于每个x, y对,都会生成一个新的二维numpy矩阵,其随机值划分为y行和x列。

    请注意,biases值仅使用sizes[1:],除了第一个以外,都会为每个这样的大小生成y -by-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
    >>>
    

    关于Python初学者,了解一些代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35807189/

    10-11 07:59