美文网首页
神经网络图2

神经网络图2

作者: 大龙10 | 来源:发表于2022-09-05 14:52 被阅读0次

书名:代码本色:用编程模拟自然系统
作者: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();
    }
    }
}

六、结果

相关文章

网友评论

      本文标题:神经网络图2

      本文链接:https://www.haomeiwen.com/subject/sjmmnrtx.html