Пример #1
0
void NeuralNetwork::updateBeforeEdges(vector<double> &delta)
{
    // 各中間ノード
    for(int m = 0; m < middle_nodes.size(); ++m)
    {
        // 修正量を計算
        Node middle = getMiddleNode(m);
        double deriv = middle.value * (1.0 - middle.value);

        // 現在の中間ノードへ伝搬する誤差
        double error = 0.0;
        for(int o = 0; o < output_nodes.size(); ++o)
        {
            Edge after_edge = after_edges.at(output_nodes.size() * middle.id + o);
            error += after_edge.weight * delta.at(o);
        }

        // 現在の中間ノードへ伸びてくるエッジ集合
        vector<Edge> edges = getBeforeEdges(m);
        for(int i = 0; i < edges.size(); ++i)
        {
            Edge e = edges.at(i);               // あるエッジ
            Node input = getInputNode(i);       // 根元のノード

            // 修正量の計算
            double update = learn_coeff * input.value * error * deriv;

            // 重みを修正して更新
            e.weight += update;
            setBeforeEdge(e);
        }
    }
}
Пример #2
0
void LocalTrackView::solo(bool b)
{
    getInputNode()->setSolo(b);// audio only
    soloButton->setChecked(b);// gui only
}
Пример #3
0
void LocalTrackView::mute(bool b)
{
    getInputNode()->setMute(b);// audio only
    muteButton->setChecked(b);// gui only
}