书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
第10章目录
10.7 神经网络图2
一、神经元之间的连接
- 一个连接由3个元素组成:2个神经元和1个权重。
class Connection {
Neuron a; 两个神经元之间的连接
Neuron b;
float weight;
Connection(Neuron from, Neuron to,float w) {
weight = w;
a = from;
b = to;
}
void display() { 连接有权重
stroke(0);
strokeWeight(weight*4);
line(a.location.x, a.location.y, b.location.x, b.location.y);
}
}
二、连接
- 有了Connection对象之后,我们可以用连接函数(放到Network类中)将神经元连在一起。
- 在setup()函数中,除了初始化神经元对象,我们还需要连接它们。
void setup() {
size(640, 360);
network = new Network(width/2,height/2);
Neuron a = new Neuron(-200,0);
Neuron b = new Neuron(0,100);
Neuron c = new Neuron(0,-100);
Neuron d = new Neuron(200,0);
network.connect(a,b); 在神经元之间建立连接
network.connect(a,c);
network.connect(b,d);
network.connect(c,d);
network.addNeuron(a);
network.addNeuron(b);
network.addNeuron(c);
network.addNeuron(d);
}
三、connect()函数
- Network类需要有一个connect()函数,它的作用是在两个神经元之间建立连接。
void connect(Neuron a, Neuron b) {
Connection c = new Connection(a, b, random(1)); 连接具有随机的权重
//如何处理连接对象呢
}
- 你可能觉得:Network对象也应该用一个ArrayList存储所有连接对象。
尽管这很有用,但在本例中,这样的ArrayList并不是必须的。 - 在神经网络的“前馈”过程中,神经元对象必须知道它们连接了哪几个“前向”神经元。也就是说,每个神经元对象必须存储自己的连接对象。
- 当神经元a与b连接时,我们要在a对象上存储这个连接对象,以便在处理过程中将输出传给b。
void connect(Neuron a, Neuron b) {
Connection c = new Connection(a, b, random(1));
a.addConnection(c);
}
- 在某些场景下,我们还需要神经元b知道这个连接。但在本例中,我们只需单方向传递信息。
四、ArrayList
- 为了让所有代码能正常工作,我们还要在Neuron类中加入一个ArrayList,用于存放连接对象。addConnection()函数负责将连接对象加入ArrayList。
class Neuron {
PVector location;
ArrayList<Connection> connections; 神经元存放了所有连接
Neuron(float x, float y) {
location = new PVector(x, y);
connections = new ArrayList<Connection>();
}
void addConnection(Connection c) { 将连接对象加入神经元
connections.add(c);
}
- 神经元类的display()函数负责绘制这些连接。最后,我们得到了整个神经网络示意图。
五、神经网络示意图
void display() {
stroke(0);
strokeWeight(1);
fill(0);
ellipse(location.x, location.y, 16, 16);
for (Connection c : connections) { 绘制所有连接
c.display();
}
}
}
六、结果

网友评论