精华内容
下载资源
问答
  • 风机桨叶故障诊断(五) 修改隐含层神经元个数的尝试  我们已经为训练一个更为稳健的神经网络做好了样本的准备工作,那么我们开始下一步的工作吧!  我们已经有了样本集,目前我筛选出来了247个正样本,652...

    风机桨叶故障诊断(五) 修改隐含层神经元个数的尝试


         我们已经为训练一个更为稳健的神经网络做好了样本的准备工作,那么我们开始下一步的工作吧!

         我们已经有了样本集,目前我筛选出来了247个正样本,652个负样本。这样的样本的规模是否够用?是处在高方差还是高偏差?需不需要增加隐含层神经元个数以增加算法的复杂程度?这些问题都可以归结到一个问题,我们的算法现在处在什么样的状态?

         下面一步我打算进行模型选择,通过选择不同隐含层神经元个数时算法的不同表现来进行分析我们的算法现在处在什么样的状态,并且选择出最适合我们问题的隐含层神经元个数。

         所以接下来的任务很简单,在已经写好的训练BP神经网络的代码基础上外面套一层for循环,我从25个隐含层节点开始运行,每次增加25个节点,一直运行到625个节点结束(事实证明这个上限选的有点大了,浪费了很多时间)。对于每次的训练,记录下神经网络在训练集和测试集上的预测准确率。全部运算完毕后将会绘出图来。

         接下来的任务就是等待了

         ...

         ...

         漫长的等待终于运行完了,没想到居然跑了14个小时。其实像这样浪费时间的事情这些天一直在发生,因为之前没有过完整的机器学习系统开发的经验,神经网络这么细致的使用也是第一次,循环的上限选大了没想到会跑这么久,再加上本来电脑就慢。不管怎样终于运行完了,来看看结果(横坐标是隐含层神经元个数):

         

         可以看到,模型在训练集上的预测准确率一直在非常高的水平,但随着隐含层神经元数量的上升,测试集上的准确率却在下降。这说明我们的算法过拟合了,由此图我们得出以下结论:

         1.隐含层个数选取在25-100是当前情况下比较好的。

         2.we need more data! 算法过拟合了,说明获取更好更多的数据能够帮到我们

         看了我们当前的神经网络的结构(25个隐含层节点)已经是比较合理的了,样本我们暂时也获取不了更多,看了下一步要想办法从特征选取上入手尝试一下了,今天就到这里~

    展开全文
  • 当训练集确定之后,输入结点数和输出结点随之而确定,首先遇到的一十分重要而又困难的问题是如何优化隐结点数和隐层数。实验表明,如果隐结点数过少,网络不能具有必要的学习能力和信息处理能力。反之,...

    当训练集确定之后,输入层结点数和输出层结点数随之而确定,首先遇到的一个十分重要而又困难的问题是如何优化隐层结点数和隐层数。实验表明,如果隐层结点数过少,网络不能具有必要的学习能力和信息处理能力。反之,若过多,不仅会大大增加网络结构的复杂性(这一点对硬件实现的网络尤其重要),网络在学习过程中更易陷入局部极小点,而且会使网络的学习速度变得很慢。隐层结点数的选择问题一直受到神经网络研究工作者的高度重视。

    方法1:
    fangfaGorman指出隐层结点数s与模式数N的关系是:s=log2N;

    方法二:
    Kolmogorov定理表明,隐层结点数s=2n+1(n为输入层结点数);

    方法三:
    s=sqrt(0.43mn+0.12nn+2.54m+0.77n+0.35)+0.51
    (m是输入层的个数,n是输出层的个数)。

    展开全文
  • 神经网络 隐含层节点数的设置】如何设置神经网络隐藏层 的神经元个数 置顶2017年10月24日 14:25:07开心果汁阅读数:12968 版权声明:本文为博主原创文章,未经博主允许不得转载。 ...

    神经网络 隐含层节点数的设置】如何设置神经网络隐藏层 的神经元个数

     版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013421629/article/details/78329191

    当训练集确定之后,输入层结点数和输出层结点数随之而确定,首先遇到的一个十分重要而又困难的问题是如何优化隐层结点数和隐层数。实验表明,如果隐层结点数过少,网络不能具有必要的学习能力和信息处理能力。反之,若过多,不仅会大大增加网络结构的复杂性(这一点对硬件实现的网络尤其重要),网络在学习过程中更易陷入局部极小点,而且会使网络的学习速度变得很慢。隐层结点数的选择问题一直受到神经网络研究工作者的高度重视。

    方法1: 
    fangfaGorman指出隐层结点数s与模式数N的关系是:s=log2N;

    方法二: 
    Kolmogorov定理表明,隐层结点数s=2n+1(n为输入层结点数);

    方法三: 
    s=sqrt(0.43mn+0.12nn+2.54m+0.77n+0.35)+0.51 
    (m是输入层的个数,n是输出层的个数)。

    转载于:https://www.cnblogs.com/shuimuqingyang/p/10228287.html

    展开全文
  • 程序中的最大学习次数,训练结束条件,学习率,隐含层神经元个数可以一步调整,所以读者可自行拿去测试,我下面的程序里隐含层神经元个数较多,运行时间会较长。另外,如果读者能对房价预测的精度提高给出建议,我将...

    前言

    程序中的最大学习次数,训练结束条件,学习率,隐含层神经元个数可以一步调整,所以读者可自行拿去测试,我下面的程序里隐含层神经元个数较多,运行时间会较长。另外,如果读者能对房价预测的精度提高给出建议,我将倍感荣幸,期待与你的交流。
    至于BP神经网络的原理及公式推导,此处不加阐释。数据文件可在我之前的文章中找到,链接如下:多元线性回归求解波士顿房价问题

    源程序

    #include<math.h>
    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    #define Data 380				//训练样本个数
    #define TestData 126			//测试样本个数
    #define In 13					//输入层神经元个数
    #define Out 1					//输出层神经元个数
    #define Neuron1 40				//隐含层1神经元个数 (程序运行需要很久)
    #define Neuron2 40				//隐含层2神经元个数 (程序运行需要很久)
    #define TrainC 100000			//训练次数
    #define WAlta 0.1			//权值w(隐含层2到输出层)学习率
    #define V1Alta 0.5				//权值v1(输入层到隐含层1)学习率
    #define V2Alta 0.5				//权值v2(隐含层1到隐含层2)学习率
    #define FeatureNumber 14		//特征个数加房价
    char FeatureName[FeatureNumber][15]; 	//存储特征名字
    double d_in[Data+TestData][In];			//存储输入数据用于乱序,并分出训练集和测试集
    double d_out[Data+TestData][Out];		//存储输出数据用于乱序,并分出训练集和测试集	
    double t_in[TestData][In];				//存储测试集输入
    double t_out[TestData][Out];			//存储测试集输出
    double pre[TestData][Out];				//存储预测样本的输出
    double v1[Neuron1][In];					//存储输入层到隐含层1的权值
    double v2[Neuron2][Neuron1];			//存储隐含层1到隐含层2的权值
    double Y1[Neuron1];						//存储隐含层1的输出
    double Y2[Neuron2];						//存储隐含层2的输出
    double w[Out][Neuron2];					//存储隐含层2到输出层的权值
    double Maxin[In], Minin[In];			//存储样本输入的最大,最小值
    double Maxout[Out], Minout[Out];		//存储样本输出的最大,最小值
    double OutputData[Out];					//存储神经网络的输出
    double dw[Out][Neuron2], dv2[Neuron2][Neuron1], dv1[Neuron1][In];//存储各权值的修正值
    double mse;								//存储均方误差
    double rmse;							//存储均方根误差
    void ReadData() {						//读取数据
    	srand((int)time(0));
    	int i, j, k;
    	FILE* fp;
    	if ((fp = fopen("housing.txt", "r")) == NULL) {		//打开数据文件
    		printf("不能打开文件!\n");
    		exit(0);
    	}
    	for (i = 0; i < FeatureNumber; ++i) {			//输入13个房价特征的名字以及房价MEDV
    		fscanf(fp, "%s", FeatureName[i]);
    	}
    	for (i = 0; i < Data+TestData; ++i) {			//文件中数据转移到数组
    		for (j = 0; j < In; ++j) {
    			fscanf(fp, "%lf", &d_in[i][j]);
    		}
    		for (k = 0; k < Out; ++k) {
    			fscanf(fp, "%lf", &d_out[i][k]);
    		}
    	}
    	for (i = 0; i < Data + TestData; ++i) {			//打乱数据集顺序
    		int k = rand() % (Data + TestData);
    		for (int l = 0; l < In; ++l) {
    			double tmp = d_in[i][l];
    			d_in[i][l] = d_in[k][l];
    			d_in[k][l] = tmp;
    		}
    		for (int l = 0; l < Out; ++l) {
    			double tmp = d_out[i][l];
    			d_out[i][l] = d_out[k][l];
    			d_out[k][l] = tmp;
    		}
    	}
    	for (i = Data; i < TestData+Data; ++i) {		//从数据集中分出训练集和测试集
    		for (j = 0; j < In; ++j) {
    			t_in[i-Data][j] = d_in[i][j];
    		}
    		for (k = 0; k < Out; ++k) {
    			t_out[i-Data][k] = d_out[i][k];
    		}
    	}
    	fclose(fp);
    }
    void InitBPNetwork() {									//初始化
    	int i, j;	
    	srand((int)time(0));
    	for (i = 0; i < In; ++i) {							//寻找训练集各输入(各特征)最大最小值
    		Minin[i] = Maxin[i] = d_in[0][i];
    		for (j = 0; j < Data; ++j) {
    			Maxin[i] = Maxin[i] > d_in[j][i] ? Maxin[i] : d_in[j][i];
    			Minin[i] = Minin[i] < d_in[j][i] ? Minin[i] : d_in[j][i];
    		}
    	}				
    	for (i = 0; i < Out; ++i) {							//寻找训练集输出(房价)最大最小值
    		Minout[i] = Maxout[i] = d_out[0][i];
    		for (j = 0; j < Data; ++j) {
    			Maxout[i] = Maxout[i] > d_out[j][i] ? Maxout[i] : d_out[j][i];
    			Minout[i] = Minout[i] < d_out[j][i] ? Minout[i] : d_out[j][i];
    		}
    	}
    	for (i = 0; i < In; ++i) {							//训练集输入数据归一化
    		for (j = 0; j < Data; ++j) {
    			d_in[j][i] = (d_in[j][i] - Minin[i]) / (Maxin[i] - Minin[i]);
    		}
    	}
    	for (i = 0; i < Out; ++i) {							//训练集输出数据归一化
    		for (j = 0; j < Data; ++j) {
    			d_out[j][i] = (d_out[j][i] - Minout[i]) / (Maxout[i] - Minout[i]);
    		}
    	}
    	for (i = 0; i < Neuron1; ++i) {						//初始化输入层到隐含层1的权值与修正值
    		for (j = 0; j < In; ++j) {
    			v1[i][j] = rand() * 2.0 / RAND_MAX - 1;
    			dv1[i][j] = 0;
    		}
    	}
    	for (i = 0; i < Neuron2; ++i) {						//初始化隐含层1到隐含层2的权值与修正值
    		for (j = 0; j < Neuron1; ++j) {
    			v2[i][j] = rand() * 2.0 / RAND_MAX - 1;
    			dv2[i][j] = 0;
    		}
    	}
    	for (i = 0; i< Out; ++i) {							//初始化隐含层2到输出层的权值与修正值
    		for (j = 0; j < Neuron2; ++j) {
    			w[i][j] = rand() * 2.0 / RAND_MAX - 1;
    			dw[i][j] = 0;
    		}
    	}
    }
    void ComputO(int var) {								//前向传播
    	int i, j;
    	double sum;
    	for (i = 0; i < Neuron1; ++i) {					//计算隐含层1的输出
    		sum = 0;
    		for (j = 0; j < In; ++j) {
    			sum += d_in[var][j] * v1[i][j];
    		}
    		Y1[i] = 1 / (1 + exp(-1 * sum));
    	}
    	for (i = 0; i < Neuron2; ++i) {					//计算隐含层2的输出
    		sum = 0;
    		for (j = 0; j < Neuron1; ++j) {
    			sum += Y1[j] * v2[i][j];
    		}
    		Y2[i] = 1 / (1 + exp(-1 * sum));
    	}
    	for (i = 0; i < Out; ++i) {						//计算输出层的输出
    		sum = 0;
    		for (j = 0; j < Neuron2; ++j) {
    			sum += Y2[j] * w[i][j];
    		}
    		OutputData[i] = 1 / (1 + exp(-1 * sum));	//神经网络的输出
    	}
    }
    void BackUpdata(int var) {							//反向传播的权值修正
    	int i, j, k;
    	double s;
    	double t = 0;
    	for (k = 0; k < Neuron1; ++k) {
    		s = 0;
    		for (i = 0; i < Neuron2; ++i) {
    			t = 0;
    			for (j = 0; j < Out; ++j) {
    				dw[j][i] = WAlta * (d_out[var][j] - OutputData[j]) * OutputData[j] * (1 - OutputData[j]) * Y2[i];//计算权值w的修正值
    				t += (d_out[var][j] - OutputData[j]) * OutputData[j] * (1 - OutputData[j]) * w[j][i];
    			}
    			for (j = 0; j < Neuron1; ++j) {
    				dv2[i][j] = V2Alta * t * Y2[i] * (1 - Y2[i]) * Y1[j];//计算权值v2的修正值
    			}
    			s += t * Y2[i] * (1 - Y2[i]) * v2[i][k];
    		}
    		for (i = 0; i < In; ++i) {
    			dv1[k][i] = V1Alta * s * Y1[k] * (1 - Y1[k]) * d_in[var][i];//计算权值v1的修正值
    		}
    	}
    	for (i = 0; i < In; ++i) {						//修正各权值
    		for (j = 0; j < Neuron1; ++j) {
    			v1[j][i] += dv1[j][i];
    		}
    	}
    	for (i = 0; i < Neuron1; ++i) {
    		for (j = 0; j < Neuron2; ++j) {
    			v2[j][i] += dv2[j][i];
    		}
    	}
    	for (i = 0; i < Neuron2; ++i) {
    		for (j = 0; j < Out; ++j) {
    			w[j][i] += dw[j][i];
    		}
    	}
    }
    void TrainNetwork() {							//神经网络的训练
    	int count = 1;
    	int i, j;
    	do {
    		mse = 0;
    		for (i = 0; i < Data; ++i) {
    			ComputO(i);
    			BackUpdata(i);
    			for (j = 0; j < Out; ++j) {
    				double tmp1 = OutputData[j] * (Maxout[j] - Minout[j]) + Minout[j];
    				double tmp2 = d_out[i][j] * (Maxout[j] - Minout[j]) + Minout[j];
    				mse += (tmp1 - tmp2) * (tmp1 - tmp2);	//累计均方误差
    			}
    		}
    		mse /= (double)Data * Out;				//计算均方误差
    		if (count % 1000 == 0) {					//观测
    			printf("训练次数:%d\t均方误差:%lf\n", count, mse);
    		}
    		count++;
    	} while (count <= TrainC && mse >= 1);
    	printf("\n训练结束\n\n");
    }
    void TestNetwork() {							//测试
    	int i, j, k;
    	double sum;
    	for (i = 0; i < In; ++i) {					//测试集输入数据归一化
    		for (j = 0; j < TestData; ++j) {
    			t_in[j][i] = (t_in[j][i] - Minin[i]) / (Maxin[i] - Minin[i]);
    		}
    	}
    	for (k = 0; k< TestData; ++k) {				//计算神经网络的输出
    		for (i = 0; i < Neuron1; ++i) {
    			sum = 0;
    			for (j = 0; j < In; ++j) {
    				sum += t_in[k][j] * v1[i][j];
    			}
    			Y1[i] = 1 / (1 + exp(-1 * sum));
    		}
    		for (i = 0; i < Neuron2; ++i) {
    			sum = 0;
    			for (j = 0; j < Neuron1; ++j) {
    				sum += Y1[j] * v2[i][j];
    			}
    			Y2[i] = 1 / (1 + exp(-1 * sum));
    		}
    		for (i = 0; i < Out; ++i) {
    			sum = 0;
    			for (j = 0; j < Neuron2; ++j) {
    				sum += Y2[j] * w[i][j];
    			}
    			pre[k][i] = (double)1 / (1 + exp(-1 * sum)) * (Maxout[i] - Minout[i]) + Minout[i];	//计算预测值
    			printf("编号:%d  \t预测值:%lf   实际值:%lf\n", k + 1, pre[k][i], t_out[k][i]);		//预测值与实际值比较
    		}
    	}
    	rmse = 0.0;
    	for (k = 0; k < TestData; ++k) {
    		for (i = 0; i < Out; ++i) {
    			rmse += (pre[k][i] - t_out[k][i]) * (pre[k][i] - t_out[k][i]);
    		}
    	}
    	rmse = sqrt(rmse / TestData / Out);		//均方根误差
    	printf("\nrmse: %.4lf\n", rmse);
    }
    int main() {
    	ReadData();
    	InitBPNetwork();
    	TrainNetwork();
    	TestNetwork();
    	return 0;
    }
    

    运行截图

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    由于最后得到的均方误差过大,怀疑可能是过度拟合的情况,把训练结束的条件改为mse>10,得到结果如下,进一步证明。
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 隐含层2个神经元为例,程序每运行一次,进行20次模型建立和测试的结果,并写入txt文件中。将txt文件数据导入到excel表格中,对迭代次数和模型误差求均值。手动将程序运行5次,将每次得到的均值再求均值,并画图,...
  • 神经网络隐藏节点个数

    万次阅读 2017-07-10 10:15:07
    根据经验公式,逐步试验法确定隐层节点数.,逐步试验得到隐层节点就是先设置一初始值,然后在这值的基础上逐渐增加,比较每次网络的预测性能,选择性能最好的对应的节点作为隐含层神经元节点。 在...
  • Matlab的双隐层的BP神经网络该如何创建-ANNBP2...两输入、双隐含层(第一隐含层神经元个数可在4-20范围内变化,第二隐含层可在5-10范围内变化) 不知道这个程序该怎样写 请高手赐教! 本人QQ :41402066
  • 隐含层神经元个数:k 输出变量个数:1输入变量:x 输出变量:y 期望输出:t 样本数量:m 隐含层-输入层连接权值:ωjp\omega _{jp} 隐含层神经元阀值: bjb _{j}输出层-隐含层连接权值:ωoj\omega _{oj} 输出...
  • 神经网络层数问题

    千次阅读 2017-11-07 22:14:00
    2层: 是从传递函数的角度考虑的,只有隐含层跟输出层有传递函数,这时候,输入是直接用线,不是用神经元来表示的。3层: 考虑的是神经元为单位的。因为输入也可以用神经元来表示的。 in the matlab help file, if...
  • 目录一、单个神经元模型回顾二、全连接单隐含层神经网络1、载入数据2、构建输入层3、构建隐藏层(新)4、构建输出层5、训练模型6、模型应用 一、单个神经元模型回顾 就如下图所示,就是单个神经元实现的,而我们将一...
  • BP神经网络

    2018-08-04 08:30:46
    BP神经网络 BP神经网络的特点: - 网络由多层构成,层与层之间全连接,同一层之间无连接 - BP网络的传递函数必须可微(二值函数就不行,一般用Sigmoid或线性...- 隐含层神经元个数为III - 输出层神经元个数为JJ...
  • 通过分析和计算建立了典型的三层BP网络,输入神经元为8个,隐含层神经元个数为6个,输出层神经元个数为2个,用加入动量项的方法对传统的BP网络算法进行改进,通过样本数据训练,测试数据检验,该网络能够较为准确地预测混煤...
  • 利用反复训练和统计学原理推导了适用于确定单个隐含层神经元个数的解析式,并提出了与其相适应的归一化方法、最优归一区间和最优隐层神经元个数的取值范围;指出当输入神经元大于3个时,采用具有双隐含层结构的BP...
  • 不过也好,可以好好理解神经网络到底是如何工作的,目前写了个BP神经网络,输入层神经元个数可选,输出层神经元个数可选,隐含层个数1个,隐含层神经元个数可选。通过该网络学习5*5图片(0~9),结果还算满意。 不过...
  • 神经网络仿真实验

    2013-05-07 11:03:55
    1. 熟悉掌握Matlab神经网络工具箱的使用;2. 理解反向传播学习算法(BP)的原理,并利用BP算法实现函数逼近功能;3. 认识隐含层神经元个数与训练函数对神经网络训练次数的影响。
  • matlab 简单神经网络 sim 自主实现

    千次阅读 2018-11-13 19:55:15
    function y = MyBPSim(net,Test_data,inputps) %Test_data,待分类的数据,每行表示一个特征向量 IW = net.IW{1,1}; % net是训练得到的网络,IW... % 维数 = 隐含层神经元个数 * 特征数 LW = net.LW{2,1}; % LW表...
  • 1) 比较采用2-3种不同的隐含层神经元个数对分类精度的影响;2) 采用不同训练算法,比较traingd,traingdm,traingdx以及trainlm的效果(精度和收敛速度)。包括源程序和神经网络结构示意图,计算结果及分析。
  • LVQ神经网络详细程序

    2018-12-10 19:44:34
    2. crossvalidation_lvq.mat为增加了交叉验证功能(确定最佳的隐含层神经元个数)的LVQ程序。 3. chapter26_bp.m为对比的BP程序。 4. data.mat为数据文件。 5. 该程序在MATLAB2009a版本下测试通过,个别函数在低...
  • 利用Matlab人工神经网络工具箱,采用改进的BP网络Levenberg Marquardt训练规则优化计算中厚板轧机的宽展,通过对该网络隐含层神经元个数的调整,使收敛速度加快,提高了宽展的预测精度。该方法使中厚板轧机自动控制...
  • BP神经网络手写数字识别matlab

    千次阅读 2020-11-03 11:33:51
    标准的前馈神经网络一般包括三层神经,即输入层,隐含层,输出层,每层神经包含的神经元个数不一。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。网络上有许多BP...
  • 该方法从一个规模较小的网络出发,当网络无法达到预定的学习精度时,自动增加隐含层神经元个数,并在原有学习结果的基础上确定新的网络参数, 自适应地确定前馈神经网络结构,可用于处理复杂化学模式信息.计算机仿真实验...
  • 研究了隐含层神经元个数m、隐含层层数h,以及训练样本对中心提取精度的影响,结果表明:当m=3,h=1,训练样本为带有噪声的随机光条时,神经网络能够得到更好的光条中心。由对比实验可以看出,所提方法相较于Steger方法和...
  • 在采用BP网络对煤层瓦斯含量进行预测的基础上,采用粒子群算法优化隐含层神经元个数和网络中的连接权值,并根据现场的实测数据,提出了粒子群神经网络训练和检验样本集,对预测模型进行训练和检验.仿真结果表明,该预测...
  • 通过对比实验,采取合适的预处理方法,确定神经网络模型的输入,设置合适的隐含层神经元个数,从而建立了基于Elman神经网络的燃气轮机功率预测模型。最后通过与反向传播(back propagation,BP)网络、径向基函数(radial ...
  • 在之前的工作中,我已经初步构建了三层的BP神经网络,并已经从样本集的选取,模型的选择(隐含层神经元个数),和输出层神经元阈值选择这几个方面对桨叶的识别问题进行了优化。也得到了一些有用的结论:  1.我们的...
  • BP神经网络故障预测的matlab实现

    千次阅读 2019-04-15 15:53:37
    BP神经网络故障预测的matlab实现 故障预测步骤 确定特征向量 确定目标向量 训练样本进行训练 测试样本进行测试 ...S1 S2 SN1 网络隐含层神经元个数 TF1 TF2… TFN1 传输函数,默认tansing。 (常...
  • %在三层网络中,隐含层神经元个数n2和输入层神经元个数n1关系约为 n2=2*n1+1 %net=newff(PR,[S1 S2...SNl],{TF1 TF2...TFNl},BTF,BLF,PF) takes, %PR -- R x 2 matrix of min and max values for R input elements ...
  • (2)隐含层神经元个数 (3)学习率 (4)激励函数 小规模数据:训练集70%,验证集30% 或者 训练60% 验证20% 测试20% 大规模数据:训练90%以上 注:可以没有测试集,验证集用于检测各种算法模型,选出...
  • 1.隐含层神经元的意义 介绍完全连接神经网络的基本结构和工作流程,可能会有人疑问了,神经元中存放的激活值是如何确定的?在解答这问题之前,小编需要首先介绍神经网络的核心机制与网络中隐含层的意义。核心机制...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 155
精华内容 62
关键字:

隐含层神经元个数