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