简单的3层神经网络实现

使用sigmoid作为激活函数的极简3层神经网络(前向)范例

导入numpy库

1
import numpy as np

定义sigmoid函数

1
2
def sigmoid(x):
return 1/(1+np.exp(-x))

初始化神经网络

1
2
3
4
5
6
7
8
9
def init_network():
network={}
network['w1']=np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
network['w2']=np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
network['w3']=np.array([[0.1,0.3],[0.2,0.4]])
network['b1']=np.array([0.1,0.2,0.3])
network['b2']=np.array([0.1,0.2])
network['b3']=np.array([0.1,0.2])
return network

定义神经网络

1
2
3
4
5
6
7
8
9
10
11
def forward(network,x):
w1,w2,w3=network['w1'],network['w2'],network['w3']
b1,b2,b3=network['b1'],network['b2'],network['b3']

a1=np.dot(x,w1)+b1
z1=sigmoid(a1)
a2=np.dot(z1,w2)+b2
z2=sigmoid(a2)
a3=np.dot(z2,w3)+b3
y=a3
return y

执行

1
2
3
4
network=init_network()
x=np.array([1.0,0.5])
y=forward(network,x)
print(y)import numpy as np

神经网络


感知机初识

感知机(perceptron)

感知机是神经网络(深度学习)的起源算法,学习感知机的构造是通向神经网络和深度学习的一种重要思想。

严格讲,应该称为“人工神经元”或“朴素感知机”,但是因为很多基本的处理都是共通的,所以这里就简单地称为“感知机”。

原理简介:

感知机接收多个输入信号,输出一个信号。
这里所说的“信号”可以想 象成电流或河流那样具备“流动性”的东西。
像电流流过导线,向前方输送 电子一样,感知机的信号也会形成流,向前方输送信息。
但是,和实际的电 流不同的是,感知机的信号只有“流/不流”(1/0)两种取值。
0 对应“不传递信号”,1对应“传递信号”。

net

如图

  • x1 、x2是输入信号,
  • y 是输出信号,
  • w1、w2是权重 (w 是 weight 的首字母)。
  • 图中的○称为“神经元”或者“节点”。
  • 输入信号被送往神经元时,会被分别乘以固定的权重(w1 x1 , w2 x2 )。
  • 神经元会计算传送过来的信号的总和,只有当这个总和超过 了某个界限值时,才会输出1(这也称为“神经元被激活)。
  • 这里将这个界限值称为阈值,用符号θ表示。

感知机的多个输入信号都有各自固有的权重,这些权重发挥着控制各个 信号的重要性的作用。也就是说,权重越大,对应该权重的信号的重要性就越高。
权重:相当于电流里的电阻。电阻是决定电流流动难度的参数, 电阻越低,通过的电流就越大。
而感知机的权重则是值越大,通过的信号就越大。
不管是电阻还是权重,在控制信号流动难度(或者流 动容易度)这一点上的作用都是一样的。


Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment