我正在尝试使用信号和插槽机制制作神经网络。 我的神经网络没有分层,所以我有一块随机连接的隐藏神经元。所以我可能在结构中有循环,我喜欢它们。 问题是当我开始从输入神经元发出信号时,第一个输入神经元将信号发送到第一个隐藏的神经元然后我宁愿我的程序将第二个信号发送到第二个隐藏的神经元。但相反,第一个接收到信号的隐藏神经元开始发出自己的信号,依此类推。当第一条路径到达终点(输出神经元)时,第一输入神经元将第二条信号发射到其第二隐藏神经元。这会导致信息部分流动的问题。即,在某个神经元接收到其所有输入之前,它仅根据收到的一个输入发送信号。我试图通过添加一个计数器来解决它,在收到所有预期的信号之后发出信号,在结构中我所拥有的环路不起作用。两个神经元正在等待另一个神经元发送信号然后它们拥有全套信号。 即使我试图在收到所有信号之前让一个空信号(值为0)通过,并在收到所有信号后通过完整的信号。这个不起作用,因为空信号正在累积计数器并且它失去控制。
void Neuron::receiveOutput(const int &senderIndex, const double &senderOutput)
{
this->m_sumOfSignals += m_indexedWeights[senderIndex] * senderOutput;
m_receivedSignals.push_back(senderIndex);
qDebug() << "I am neuron " << this->index() << " and I received a signal from neuron "
<< senderIndex << " valued " << senderOutput;
if(m_receivedSignals.size() == m_indexedWeights.size())
{
m_output = this->activate();
qDebug() << "I have receieved all " << m_receivedSignals.size() << " signals so I send my output as "
<< m_output;
m_sumOfSignals = 0.0;
emit sendOutput(m_index, m_output);
}
if(m_receivedSignals.size() < m_indexedWeights.size())
{
m_output = this->activate();
qDebug() << "so far I have receieved " << m_receivedSignals.size() << " signals so I send my output as "
<< m_output;
emit sendOutput(m_index, 0.0);
}
if(m_receivedSignals.size() > m_indexedWeights.size())
{
qDebug() << "I have receieved " << m_receivedSignals.size() << " signals so I stoped sending signals";
return;
}
}
所以我的问题是如何控制网络中流动的信号?