神经网络的基本理解和可视化

时间:2020-11-03 12:21:30

标签: python neural-network visualization

我正在研究一本书,它从一开始就描述了神经网络,甚至没有使用numpy函数乘以向量等。

所以我有以下代码:

weights = [0.1, 0.2, 0]

def w_sum(a, b):            # weighted sum function
    assert(len(a) == len(b))
    output = 0
    for i in range(len(a)):
        output += (a[i] * b[i])
    return output

def neural_network(input, weights):
    pred = w_sum(input, weights)     #the weighted sum function with values = dot product
    return pred



info1 = [8.5, 9.5, 9.9, 9.0]
info2 = [0.65, 0.8, 0.8, 0.9]
info3 = [1.2, 1.3, 0.5, 1.0]

input = [info1[0], info2[0], info3[0]]
pred = neural_network(input, weights)

print(pred)

因此对于此代码,我也有以下图表: neural network basic structure

现在:在该图右侧的这三个结中,网络是什么?对我来说,输出似乎是相同的数字(在这种情况下,因为我使用的是input = [info1[0], info2[0], info3[0]],所以数字是:0.98) ?

为什么要显示此图?它在书中给出。但是,如果所有输出都输出相同的数字,那么实际发生的事情(加权和等于0.85 + 0.13 + 0.0 = 0.98)

我的意思是我试图了解该图想告诉我什么或如何阅读它。

我想进一步了解w_sum(a,b)函数的实际运行方式。我不了解正在发生的事情的结构,尤其是assert函数正在做什么。

编辑:因此,在有启发性的答案之后,我更新了该图,该图实际上与代码有关。

This is the Diagram that fits the code

非常感谢和最良好的祝愿

本杰明

3 个答案:

答案 0 :(得分:1)

该图(几乎)描述了全连接神经网络的一般结构(缺少激活功能)。

该图右侧的这三个结中的网络是什么?

数字。从上一层派生的信息。这些数字实际上是什么意思,以及在直观水平上网络如何处理信息是一个更加困难的问题,对此您很少得到答案(某些CNN已分解以显示图像正在通过网络进行转换,以及每一层提取什么样的特征)。如果仅尝试在操作级别(即每一层中发生了什么数学运算)而不是为什么起作用,来理解网络的工作原理,将会对您有很大的帮助。

对于实现,函数w_sum()计算两个向量(列表)ab的{​​{3}}。它的实现基于点积的数学定义。 同样,对于要定义的点积,向量需要具有相等数量的分量(尺寸)。为了保证这一点,首先使用assert语句。如果您不熟悉它的功能,请继续阅读dot product

这里令人困惑的是,该实现未完全反映该图。对于此实现,正确的图在第二层上只有一个节点(第一个)。

最后要注意的是,列表info0info1info2在时间i保存第一层中节点的值。因此,在时间0,输入向量(第一层中所有节点的值)为[info1[0], info2[0], info3[0]],在时间1为[info1[1], info2[1], info3[1]],等等。

答案 1 :(得分:0)

好,让我们从assert函数开始,在那里可以测试输入是否包含3个数字,因为那是网络接受的形状,否则将引发错误,程序将崩溃。

从该图看来,您现在仅对第一个输出有所了解,这是您唯一的权重,代码中的网络是该图,输出中没有其他2个节点。顺便说一下,这就是简单的Perceptron模型。 它试图告诉您,以后您可以堆叠许多微型模型以创建更大的模型。

w_sum()方法实际上只是对输入进行加权求和,这就是简单模型的工作原理,因此它会执行input1 * w1 i + input2 * w2 + input3 * w3在这种情况下,w是模型的权重,输入是函数中传递的内容

答案 2 :(得分:0)

到目前为止,您所获得的是一个非常简单的神经网络,这似乎是学习更高级的神经网络的第一步。它没有隐藏层,也没有激活功能。因此,是的,目前它并没有做什么用,这只是网络即将推出的功能的基础。

似乎您了解该图试图告诉您的内容。目前,没有什么比每个输出的加权总和更多了。

assert语句仅检查输入数量是否与权重数量相关。 w_sum所做的全部是将每个input的总和乘以weight并返回。