做58招聘网站工作人员的心得,ASP.NET实用网站开发 课后答案,成品网站nike源码免费,长沙网站维护公司一、多层前向神经网络多层前向神经网络由三部分组成#xff1a;输出层、隐藏层、输出层#xff0c;每层由单元组成;输入层由训练集的实例特征向量传入#xff0c;经过连接结点的权重传入下一层#xff0c;前一层的输出是下一层的输入;隐藏层的个数是任意的#xff0c;输入…一、多层前向神经网络多层前向神经网络由三部分组成输出层、隐藏层、输出层每层由单元组成;输入层由训练集的实例特征向量传入经过连接结点的权重传入下一层前一层的输出是下一层的输入;隐藏层的个数是任意的输入层只有一层输出层也只有一层;除去输入层之外隐藏层和输出层的层数和为n则该神经网络称为n层神经网络如下图为2层的神经网络;一层中加权求和根据非线性方程进行转化输出;理论上如果有足够多的隐藏层和足够大的训练集可以模拟出任何方程;二、设计神经网络结构使用神经网络之前必须要确定神经网络的层数以及每层单元的个数;为了加速学习过程特征向量在传入输入层前通常需要标准化到0和1之间;离散型变量可以被编码成每一个输入单元对应一个特征值可能赋的值比如特征值A可能去三个值(a0,a1,a2)那么可以使用3个输入单元来代表A如果Aa0则代表a0的单元值取1其余取0;如果Aa1则代表a1的单元值取1其余取0;如果Aa2则代表a2的单元值取1其余取0;神经网络既解决分类(classification)问题也可以解决回归(regression)问题。对于分类问题如果是两类则可以用一个输出单元(0和1)分别表示两类;如果多余两类则每一个类别用一个输出单元表示所以输出层的单元数量通常等一类别的数量。没有明确的规则来设计***个数的隐藏层一般根据实验测试误差和准确率来改进实验。三、交叉验证方法如何计算准确率?最简单的方法是通过一组训练集和测试集训练集通过训练得到模型将测试集输入模型得到测试结果将测试结果和测试集的真实标签进行比较得到准确率。在机器学习领域一个常用的方法是交叉验证方法。一组数据不分成2份可能分为10份第1次第1份作为测试集剩余9份作为训练集;第2次第2份作为测试集剩余9份作为训练集;……这样经过10次训练得到10组准确率将这10组数据求平均值得到平均准确率的结果。这里10是特例。一般意义上将数据分为k份称该算法为K-fold cross validation即每一次选择k份中的一份作为测试集剩余k-1份作为训练集重复k次最终得到平均准确率是一种比较科学准确的方法。四、BP算法通过迭代来处理训练集中的实例;对比经过神经网络后预测值与真实值之间的差;反方向(从输出层隐藏层输入层)来最小化误差来更新每个连接的权重;4.1、算法详细介绍输入数据集、学习率、一个多层神经网络构架;输出一个训练好的神经网络;初始化权重和偏向随机初始化在-1到1之间(或者其他)每个单元有一个偏向;对于每一个训练实例X执行以下步骤1、由输入层向前传送结合神经网络示意图进行分析由输入层到隐藏层由隐藏层到输出层两个公式进行总结可以得到Ij为当前层单元值Oi为上一层的单元值wij为两层之间连接两个单元值的权重值sitaj为每一层的偏向值。我们要对每一层的输出进行非线性的转换示意图如下当前层输出为Ijf为非线性转化函数又称为激活函数定义如下即每一层的输出为这样就可以通过输入值正向得到每一层的输出值。2、根据误差反向传送 对于输出层其中Tk是真实值Ok是预测值对于隐藏层权重更新其中l为学习率偏向更新3、终止条件偏重的更新低于某个阈值;预测的错误率低于某个阈值;达到预设一定的循环次数;4、非线性转化函数上面提到的非线性转化函数f一般情况下可以用两种函数(1)tanh(x)函数tanh(x)sinh(x)/cosh(x)sinh(x)(exp(x)-exp(-x))/2cosh(x)(exp(x)exp(-x))/2(2)逻辑函数本文上面用的就是逻辑函数五、BP神经网络的python实现需要先导入numpy模块import numpyasnp定义非线性转化函数由于还需要用到给函数的导数形式因此一起定义def tanh(x):returnnp.tanh(x)def tanh_deriv(x):return1.0 - np.tanh(x)*np.tanh(x)def logistic(x):return1/(1 np.exp(-x))def logistic_derivative(x):returnlogistic(x)*(1-logistic(x))设计BP神经网络的形式(几层每层多少单元个数)用到了面向对象主要是选择哪种非线性函数以及初始化权重。layers是一个list里面包含每一层的单元个数。class NeuralNetwork:def __init__(self, layers, activationtanh)::param layers: A list containing the number ofunitsineach layer.Should be atleast twovalues:param activation: The activation functiontobe used. Can belogisticortanhif activation logistic:self.activation logisticself.activation_deriv logistic_derivativeelif activation tanh:self.activation tanhself.activation_deriv tanh_derivself.weights []foriinrange(1, len(layers) - 1):self.weights.append((2*np.random.random((layers[i - 1] 1, layers[i] 1))-1)*0.25)self.weights.append((2*np.random.random((layers[i] 1, layers[i 1]))-1)*0.25)实现算法def fit(self, X, y, learning_rate0.2, epochs10000):X np.atleast_2d(X)temp np.ones([X.shape[0], X.shape[1]1])temp[:, 0:-1] XX tempy np.array(y)forkinrange(epochs):i np.random.randint(X.shape[0])a [X[i]]forlinrange(len(self.weights)):a.append(self.activation(np.dot(a[l], self.weights[l])))error y[i] - a[-1]deltas [error * self.activation_deriv(a[-1])]forlinrange(len(a) - 2, 0, -1):deltas.append(deltas[-1].dot(self.weights[l].T)*self.activation_deriv(a[l]))deltas.reverse()foriinrange(len(self.weights)):layer np.atleast_2d(a[i])delta np.atleast_2d(deltas[i])self.weights[i] learning_rate * layer.T.dot(delta)实现预测def predict(self, x):x np.array(x)temp np.ones(x.shape[0]1)temp[0:-1] xa tempforlinrange(0, len(self.weights)):a self.activation(np.dot(a, self.weights[l]))returna我们给出一组数进行预测我们上面的程序文件保存名称为BPfromBP import NeuralNetworkimport numpy asnpnn NeuralNetwork([2,2,1], tanh)x np.array([[0,0], [0,1], [1,0], [1,1]])y np.array([1,0,0,1])nn.fit(x,y,0.1,10000)foriin[[0,0], [0,1], [1,0], [1,1]]:print(i, nn.predict(i))结果如下([0, 0], array([ 0.99738862]))([0, 1], array([ 0.00091329]))([1, 0], array([ 0.00086846]))([1, 1], array([ 0.99751259]))【编辑推荐】【责任编辑枯木 TEL(010)68476606】点赞 0