Untitled

mail@pastecode.io avatar
unknown
plain_text
7 months ago
1.2 kB
7
Indexable
Never
// STUDENT TODO: IMPLEMENT
double NeuralNetwork::contribute(int nodeId, const double& y, const double& p) {

    double incomingContribution = 0;
    double outgoingContribution = 0;
    NodeInfo* currNode = nodes.at(nodeId);

    // find each incoming contribution, and contribute to the nodes outgoing weights
    // If the node is already found, use its precomputed contribution from the contributions map
    for (auto& c : adjacencyList.at(nodeId)) {
        int neighbor = c.first;
        Connection& connection = c.second;
        if (contributions.find(neighbor) == contributions.end()) 
            contributions.insert(make_pair(neighbor, contribute(neighbor, y, p)));
        incomingContribution = contributions.at(neighbor);
        visitContributeNeighbor(connection, incomingContribution, outgoingContribution);
        // cout << nodeId << " Weight Delta After: " << c.second.delta << endl;
    }

    if (adjacencyList.at(nodeId).empty()) {
        // base case, we are at the end
        outgoingContribution = -1 * ((y - p) / (p * (1 - p)));
    } 

    // Now contribute to yourself and prepare the outgoing contribution
    visitContributeNode(nodeId, outgoingContribution);

    return outgoingContribution;
}
Leave a Comment