我一直试图实现反向传播神经网络一段时间,我一次又一次地面临问题.到目前为止的进展是我的神经网络适用于XOR,AND和OR.
下图显示我的神经网络训练超过100000次迭代的XOR,它似乎收敛良好.为此,我有2个输入神经元和一个输出神经元,隐藏层有2个神经元[虽然1已经足够]

现在我正在向前推进训练相同的网络,将XY平面中的坐标分成两个类,其中2个输入神经元和1个输出神经元的结构相同,单个隐藏层有两个神经元:

对于接下来的训练我只训练了两个班级,但是有2个输出神经元,并保持结构的其余部分相同,这段时间需要很长时间才能收敛但是确实如此.
但现在我增加到三个班级; A类将是100而B类将是010而C类将是001但现在当我训练它时它永远不会收敛并给出以下数据如下所示:

它似乎永远不会收敛.我已经观察到这种模式,如果我增加输出层中的神经元数量,错误率会像任何东西一样增加?我可以指引我到哪里出错吗?
我已经上传了所有的代码..这是正在进行的工作..请检查realloc()因为如果我没有达到realloc()的条件一切正常...谢谢evry1 ..
// contactinfo.h-- header file
#ifndef _ELEMENT_H
#define _ELEMENT_H
typedef struct ContactInfo ContactInfo;
struct ContactInfo{
char Name[30];
char email_id[50];
int phon_num;
};
typedef ContactInfo **ContactList;
#endif
//contactops.h
#include "contactInfo.h"
ContactList createCL(int size);
void addContact(ContactList clist1, ContactList clist2, ContactInfo ci, int size);
ContactInfo *findByName(ContactList cl, char *name);
ContactInfo *findByNumber(ContactList cl, int num);
void deleteContactByName(ContactList cl, ContactList c2, char *name);
void deleteContactByNumber(ContactList cl, ContactList c2, int num);
void printContacts(ContactList cl);
void Merge_Sort(int hi, int mid, int lo, ContactList c);
void Merge(int …Run Code Online (Sandbox Code Playgroud)