当前位置: 首页 > news >正文

网站 建设标准山东东营市东营区

网站 建设标准,山东东营市东营区,公司网站介绍模板 html,做网站必须原创吗遗传算法与深度学习实战#xff08;22#xff09;——使用Numpy构建神经网络 0. 前言1. 神经网络基础1.1 简单神经网络的架构1.2 神经网络的训练 2. 使用 Numpy 构建神经网络2.1 网络架构2.2 实现神经网络 小结系列链接 0. 前言 我们已经学习了如何使用进化算法来优化深度学… 遗传算法与深度学习实战22——使用Numpy构建神经网络 0. 前言1. 神经网络基础1.1 简单神经网络的架构1.2 神经网络的训练 2. 使用 Numpy 构建神经网络2.1 网络架构2.2 实现神经网络 小结系列链接 0. 前言 我们已经学习了如何使用进化算法来优化深度学习网络中的超参数与简单的随机或网格搜索算法相比使用进化算法可以改善对超参数的搜索。多种进化算法的变体如粒子群优化、进化策略和差分进化可以用于搜索和优化超参数。神经进化涵盖了所有用于改进深度学习的进化算法在本节中我们使用 NumPy 构建一个简单的多层感知器 (multi-layer perceptron, MLP) 作为神经进化的基础。 1. 神经网络基础 1.1 简单神经网络的架构 人工神经网络受到人脑运作方式的启发。从本质上讲它是对线性回归和逻辑回归的一种改进神经网络在计算输出时引入了多种非线性函数。此外神经网络在修改网络体系结构以利用结构化和非结构化数据跨多个域解决问题方面具有极大的灵活性。函数越复杂网络对于输入的数据拟合能力就越大因此预测的准确性就越高。神经网络的典型结构如下 神经网络中的层 (layer) 是一个或多个节点(或称计算单元)的集合层中的每个节点都连接到下一层中的每个节点。输入层由预测输出值所需的输入变量组成。输出层中节点的数量取决于我们要预测连续变量还是分类变量。如果输出是连续变量则输出层一个节点。 如果输出结果是 n n n 个类别的预测类的分类则输出层中将有 n n n 个节点。隐藏层用于将输入层的值转换为高维空间中的值以便我们可以从输入中了解数据的更多特征。隐藏层中节点的工作方式如下 在上图中 x 1 , x 2 , . . . , x n x_1, x_2, ..., x_n x1​,x2​,...,xn​ 是自变量 x 0 x_0 x0​ 是偏置项类似于线性方程 y k x b ykxb ykxb 里的 b b b w 1 , w 2 , . . . , w n w_1, w_2, ..., w_n w1​,w2​,...,wn​ 是赋予每个输入变量的权重。如果 a a a 是隐藏层中的节点之一则计算方法如下所示 a f ( ∑ w i N w i x i ) af(\sum _{w_i} ^N w_ix_i) af(wi​∑N​wi​xi​) f f f 函数是激活函数用于在输入和它们相应的权重值的总和上引入非线性。可以通过使用多个隐藏层实现更强的非线性能力。 综上神经网络是相互连接的层中节点权重的集合。该集合分为三个主要部分输入层隐藏层和输出层。神经网络中可以具有 n n n 个隐藏层术语“深度学习”通常表示具有多个隐藏层的神经网络。 当神经网络需要学习具有复杂上下文(例如图像识别)或上下文不明显的任务时就必须具有隐藏层隐藏层也被称为中间层。 1.2 神经网络的训练 训练神经网络实际上就是通过重复两个关键步骤来调整神经网络中的权重前向传播和反向传播。 在前向传播中我们将一组权重应用于输入数据将其传递给隐藏层对隐藏层计算后的输出使用非线性激活通过若干个隐藏层后将最后一个隐藏层的输出与另一组权重相乘就可以得到输出层的结果。对于第一次正向传播权重的值将随机初始化。在反向传播中尝试通过测量输出的误差然后相应地调整权重以降低误差。神经网络重复正向传播和反向传播以预测输出直到获得令误差较小的权重为止。 2. 使用 Numpy 构建神经网络 2.1 网络架构 在本节中我们将实现基本的深度学习系统使用 NumPy 编写多层感知器本节并未使用类似 Keras 或 PyTorch 的框架以便可以清楚地可视化神经网络内部过程。 一个简单的多层感知器 (multi-layer perceptron, MLP) 网络如下所示可以看到反向传播是如何通过网络传播计算得到的损失的以及神经进化优化是如何将网络的每个权重/参数替换为基因序列中的值的。实际上这种进化搜索与超参数搜索类似。 2.2 实现神经网络 为了进一步理解 MLP 及其内部工作原理我们将使用 NumPy 实现 MLP。然后研究这个简单网络在各种分类问题上的训练过程。 (1) 使用 sklearn 的 make_datasets 函数构建数据集 import numpy as np import sklearn import sklearn.datasets import sklearn.linear_model import matplotlib.pyplot as pltnumber_samples 100 #param {type:slider, min:100, max:1000, step:25} difficulty 1 #param {type:slider, min:1, max:5, step:1} problem circles #param [classification, blobs, gaussian quantiles, moons, circles] number_features 2 number_classes 2 middle_layer 5 #param {type:slider, min:5, max:25, step:1} epochs 25000 #param {type:slider, min:1000, max:50000, step:1000}def load_data(problem): if problem classification:clusters 1 if difficulty 3 else 2informs 1 if difficulty 4 else 2data sklearn.datasets.make_classification(n_samples number_samples,n_featuresnumber_features, n_redundant0, class_sep1/difficulty,n_informativeinforms, n_clusters_per_classclusters)if problem blobs:data sklearn.datasets.make_blobs(n_samples number_samples,n_featuresnumber_features, centersnumber_classes,cluster_std difficulty)if problem gaussian quantiles:data sklearn.datasets.make_gaussian_quantiles(meanNone, covdifficulty,n_samplesnumber_samples,n_featuresnumber_features,n_classesnumber_classes,shuffleTrue,random_stateNone)if problem moons:data sklearn.datasets.make_moons(n_samples number_samples)if problem circles:data sklearn.datasets.make_circles(n_samples number_samples)return datadata load_data(problem) X, Y dataplt.figure(Input Data) plt.scatter(X[:, 0], X[:, 1], cY, s40, cmapplt.cm.Spectral)下图显示了最高难度级别的数据集示例修改问题类型以观察每个数据集的变化。对于简单的 MLP 网络来说最困难的数据集是圆形数据集。 模型参数选项如下表所示 参数描述取值范围number_samples数据集样本数100-1000difficulty问题难度系数1-5problem定义数据集所用的函数classification make_classificationmoons make_moonscircles make_circles blobs make_blobs Gaussianquantiles make_gaussian_quantilesmiddle_layer网络隐藏层数5-25epochs训练迭代次数1000–25000 (2) 作为基线比较 sklearn 的简单逻辑回归(分类)模型 def show_predictions(model, X, Y, name): display the labeled data X and a surface of prediction of model x_min, x_max X[:, 0].min() - 1, X[:, 0].max() 1y_min, y_max X[:, 1].min() - 1, X[:, 1].max() 1xx, yy np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))X_temp np.c_[xx.flatten(), yy.flatten()]Z model.predict(X_temp)plt.figure(Predictions name)plt.contourf(xx, yy, Z.reshape(xx.shape), cmapplt.cm.Spectral)plt.ylabel(x2)plt.xlabel(x1) plt.scatter(X[:, 0], X[:, 1],cY, s40, cmapplt.cm.Spectral)clf sklearn.linear_model.LogisticRegressionCV() clf.fit(X, Y)show_predictions(clf, X, Y, Logistic regression)LR_predictions clf.predict(X) print(Logistic Regression accuracy : , np.sum(LR_predictions Y) / Y.shape[0])下图显示了 show_predictions() 函数的输出该函数用于模型对数据的分类情况的可视化。 (3) 创建 MLP 网络对其进行训练并可视化运行结果 def sigmoid(x):return 1.0 / (1.0 np.exp(-x)) ## Neural Network class Neural_Network:def __init__(self, n_in, n_hidden, n_out):# Network dimensionsself.n_x n_inself.n_h n_hiddenself.n_y n_out# Parameters initializationself.W1 np.random.randn(self.n_h, self.n_x) * 0.01self.b1 np.zeros((self.n_h, 1))self.W2 np.random.randn(self.n_y, self.n_h) * 0.01self.b2 np.zeros((self.n_y, 1))def forward(self, X): Forward computation self.Z1 self.W1.dot(X.T) self.b1self.A1 np.tanh(self.Z1)self.Z2 self.W2.dot(self.A1) self.b2self.A2 sigmoid(self.Z2)def back_prop(self, X, Y): Back-progagate gradient of the loss m X.shape[0]self.dZ2 self.A2 - Yself.dW2 (1 / m) * np.dot(self.dZ2, self.A1.T)self.db2 (1 / m) * np.sum(self.dZ2, axis1, keepdimsTrue)self.dZ1 np.multiply(np.dot(self.W2.T, self.dZ2), 1 - np.power(self.A1, 2))self.dW1 (1 / m) * np.dot(self.dZ1, X)self.db1 (1 / m) * np.sum(self.dZ1, axis1, keepdimsTrue)def train(self, X, Y, epochs, learning_rate1.2): Complete process of learning, alternates forward pass,backward pass and parameters update m X.shape[0]for e in range(epochs):self.forward(X)loss -np.sum(np.multiply(np.log(self.A2), Y) np.multiply(np.log(1-self.A2), (1 - Y))) / mself.back_prop(X, Y)self.W1 - learning_rate * self.dW1self.b1 - learning_rate * self.db1self.W2 - learning_rate * self.dW2self.b2 - learning_rate * self.db2if e % 1000 0:print(Loss , e, , loss)def predict(self, X): Compute predictions with just a forward pass self.forward(X)return np.round(self.A2).astype(np.int)nn Neural_Network(2, middle_layer, 1) nn.train(X, Y, epochs, 1.2)show_predictions(nn, X, Y, Neural Network)nn_predictions nn.predict(X) print(Neural Network accuracy : , np.sum(nn_predictions Y) / Y.shape[0])MLP 网络的训练结果如下所示使用 MLP 网络的结果比 sklearn 的逻辑回归模型性能更好。但这个简单的网络仍然难以解决所有问题数据集。 下图显示了 MLP 网络在圆圈问题集进行训练后的输出。可以看到圆圈问题的准确率为 50%而月亮问题的准确率为 89%。 可以通过完成以下问题进一步理解 MLP 及其训练过程 增加或减少样本数量然后重新运行代码更改问题类型和难度然后在每次更改后重新运行代码更改模型参数和中间层然后重新运行 小结 在本文中 我们了解了神经网络的相关基础知识同时利用 Numpy 从零开始实现了神经网络的训练过程——前向传播和反向传播了解了神经网络的通用训练流程。 系列链接 遗传算法与深度学习实战1——进化深度学习 遗传算法与深度学习实战2——生命模拟及其应用 遗传算法与深度学习实战3——生命模拟与进化论 遗传算法与深度学习实战4——遗传算法Genetic Algorithm详解与实现 遗传算法与深度学习实战5——遗传算法中常用遗传算子 遗传算法与深度学习实战6——遗传算法框架DEAP 遗传算法与深度学习实战7——DEAP框架初体验 遗传算法与深度学习实战8——使用遗传算法解决N皇后问题 遗传算法与深度学习实战9——使用遗传算法解决旅行商问题 遗传算法与深度学习实战10——使用遗传算法重建图像 遗传算法与深度学习实战11——遗传编程详解与实现 遗传算法与深度学习实战12——粒子群优化详解与实现 遗传算法与深度学习实战13——协同进化详解与实现 遗传算法与深度学习实战14——进化策略详解与实现 遗传算法与深度学习实战15——差分进化详解与实现 遗传算法与深度学习实战16——神经网络超参数优化 遗传算法与深度学习实战17——使用随机搜索自动超参数优化 遗传算法与深度学习实战18——使用网格搜索自动超参数优化 遗传算法与深度学习实战19——使用粒子群优化自动超参数优化 遗传算法与深度学习实战20——使用进化策略自动超参数优化 遗传算法与深度学习实战21——使用差分搜索自动超参数优化
http://www.w-s-a.com/news/305120/

相关文章:

  • 网站自助建设平台创建网址快捷方式
  • 坑梓网站建设包括哪些成都网站建设优创
  • 重庆网站seo公司哪家好超级优化大师
  • 成都网站建设推广详情邵阳市住房和城乡建设局网站
  • 淄博网站推广猎头公司有哪些
  • 局域网内建立网站90设计网怎么样
  • 域名备案和网站备案有什么不同工程项目建设网站
  • 做网站难吗?wordpress评论qq
  • 权威网站优化价格电子商务静态网站建设实验报告
  • 公司如何办网站北京网站建设公司内江
  • 六安建设网站企业营业执照查询系统入口
  • a5网站建设如果建设淘宝导购网站
  • html5响应式网站开发教程在国内做跨境电商怎么上外国网站
  • win7配置不能运行wordpress关键词快速优化排名软件
  • 餐饮公司最好的网站建设手机网站 搜索优化 百度
  • 17网站一起做网批做服装团购网站
  • 广州网站制作知名企业网站搭建品牌
  • 如何去除网站外链个人网页制作全过程
  • 保洁公司网站怎么做科技设计网站有哪些内容
  • 建设厅网站查询网页设计好就业吗
  • 惠东县网站建设wordpress 如何回到初始
  • 如何让公司网站网站转备案
  • 获得网站所有关键字北京网站建设116net
  • 铜陵电子商务网站建设做龙之向导网站有用吗
  • 购物网站制作费用沧州新华区
  • 信宜网站设计公司在线购物商城系统
  • 网站维护是什么样如何制作网站教程视频讲解
  • 网站建设网络推广代理公司wordpress图片防盗链
  • 网站备案关站沈阳男科医院哪家好点
  • 王者荣耀网站建设的步骤网站页面用什么软件做