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

容桂网站智能推广新闻/最新全国疫情实时大数据

容桂网站智能推广新闻,最新全国疫情实时大数据,wordpress产品参数,淄博市 网站建设报价初始化 欢迎来到“改进深层神经网络”的第一个任务。 训练神经网络需要指定权重的初始值,精心选择的初始化方法将有助于学习。 如果您完成了本专业的上一门课程,您可能会按照我们的说明进行重量初始化,并且到目前为止已经完成了。但是你如何…

初始化

欢迎来到“改进深层神经网络”的第一个任务。 训练神经网络需要指定权重的初始值,精心选择的初始化方法将有助于学习。 如果您完成了本专业的上一门课程,您可能会按照我们的说明进行重量初始化,并且到目前为止已经完成了。但是你如何为一个新的神经网络选择初始化?在本节中,您将看到不同的初始化如何导致不同的结果。

选择一个好的初始化可以:

  • 加速梯度下降的收敛
  • 增加梯度下降收敛到较低训练(和泛化)误差率

要开始,请运行以下单元来导入分类所需的软件包和平面数据集。

import numpy as np
import matplotlib.pyplot as plt
import sklearn
import sklearn.datasets
from init_utils import sigmoid, relu, compute_loss, forward_propagation, backward_propagation
from init_utils import update_parameters, predict, load_dataset, plot_decision_boundary, predict_dec%matplotlib inline
plt.rcParams['figure.figsize'] = (7.0, 4.0) # set default size of plots
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'# load image dataset: blue/red dots in circles
train_X, train_Y, test_X, test_Y = load_dataset()

结果:

 

1 -神经网络模型

您将使用三层神经网络(已经为您实现)。以下是您将尝试的初始化方法:

  • 零初始化 - 输入参数全部初始化为0,在输入参数中设置 initialization = "zeros"。
  • parameters['W' + str(l)] = np.zeros((layers_dims[l], layers_dims[l - 1]))

  • 随机初始化 - 把输入参数设置为随机值,权重初始化为大的随机值,在输入参数中设置 initialization = "random" 。这将权重初始化为大的随机值。
  • parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) * 10

  • 抑梯度异常初始化 - 参见梯度消失和梯度爆炸的那一个视频,在输入参数中设置 initialization = "he"。这将权重初始化为根据何等人2015年的论文缩放的随机值。
  • parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) * np.sqrt(2 / layers_dims[l - 1])

说明:请快速阅读下面的代码,并运行它。在下一部分中,您将实现该 model() 调用的三种初始化方法。

def model(X, Y, learning_rate = 0.01, num_iterations = 15000, print_cost = True, initialization = "he"):"""实现一个三层的神经网络:LINEAR ->RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID参数:X - 输入的数据,维度为(2, 要训练/测试的数量)Y - 标签,【0 | 1】,维度为(1,对应的是输入的数据的标签)learning_rate - 学习速率num_iterations - 迭代的次数print_cost - 是否打印成本值,每迭代1000次打印一次initialization - 字符串类型,初始化的类型【"zeros" | "random" | "he"】is_polt - 是否绘制梯度下降的曲线图返回:parameters - 学习后的参数"""grads = {}costs = [] # to keep track of the lossm = X.shape[1] # number of exampleslayers_dims = [X.shape[0], 10, 5, 1]# Initialize parameters dictionary.if initialization == "zeros":parameters = initialize_parameters_zeros(layers_dims)elif initialization == "random":parameters = initialize_parameters_random(layers_dims)elif initialization == "he":parameters = initialize_parameters_he(layers_dims)# Loop (gradient descent)for i in range(0, num_iterations):# 前向传播: LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID.a3, cache = forward_propagation(X, parameters)# Losscost = compute_loss(a3, Y)# 反向传播grads = backward_propagation(X, Y, cache)# 更新参数parameters = update_parameters(parameters, grads, learning_rate)# Print the loss every 1000 iterationsif print_cost and i % 1000 == 0:print("Cost after iteration {}: {}".format(i, cost))costs.append(cost)# plot the lossplt.plot(costs)plt.ylabel('cost')plt.xlabel('iterations (per hundreds)')plt.title("Learning rate =" + str(learning_rate))plt.show()return parameters

 

2 -零初始化

在神经网络中有两种类型的参数要初始化:

权重矩阵:(?[1],?[2],?[3],...,?[?−1],?[?] )

偏差向量:(?[1],?[2],?[3],...,?[?−1],?[?])

练习:执行以下功能将所有参数初始化为零。稍后您将会看到这种方法并不奏效,因为它无法“打破对称性”,但是无论如何让我们尝试一下,看看会发生什么。使用 np.zeros((..,..)) 具有正确的维度。

# GRADED FUNCTION: initialize_parameters_zeros def initialize_parameters_zeros(layers_dims):"""将模型的参数全部设置为0参数:layers_dims - 列表,模型的层数和对应每一层的节点的数量返回parameters - 包含了所有W和b的字典W1 - 权重矩阵,维度为(layers_dims[1], layers_dims[0])b1 - 偏置向量,维度为(layers_dims[1],1)···WL - 权重矩阵,维度为(layers_dims[L], layers_dims[L -1])bL - 偏置向量,维度为(layers_dims[L],1)"""parameters = {}L = len(layers_dims)            # 网络层数for l in range(1, L):### START CODE HERE ### (≈ 2 lines of code)parameters['W' + str(l)] = np.zeros((layers_dims[l],layers_dims[l-1]))parameters['b' + str(l)] = np.zeros((layers_dims[l],1))### END CODE HERE ###return parameters

测试:

parameters = initialize_parameters_zeros([3,2,1])
print("W1 = " + str(parameters["W1"]))
print("b1 = " + str(parameters["b1"]))
print("W2 = " + str(parameters["W2"]))
print("b2 = " + str(parameters["b2"]))

结果:

W1 = [[0. 0. 0.][0. 0. 0.]]
b1 = [[0.][0.]]
W2 = [[0. 0.]]
b2 = [[0.]]

运行以下代码,使用零初始化在15,000次迭代中训练您的模型。

parameters = model(train_X, train_Y, initialization = "zeros")
print ("On the train set:")
predictions_train = predict(train_X, train_Y, parameters)
print ("On the test set:")
predictions_test = predict(test_X, test_Y, parameters)

结果:

Cost after iteration 0: 0.6931471805599453
Cost after iteration 1000: 0.6931471805599453
Cost after iteration 2000: 0.6931471805599453
Cost after iteration 3000: 0.6931471805599453
Cost after iteration 4000: 0.6931471805599453
Cost after iteration 5000: 0.6931471805599453
Cost after iteration 6000: 0.6931471805599453
Cost after iteration 7000: 0.6931471805599453
Cost after iteration 8000: 0.6931471805599453
Cost after iteration 9000: 0.6931471805599453
Cost after iteration 10000: 0.6931471805599455
Cost after iteration 11000: 0.6931471805599453
Cost after iteration 12000: 0.6931471805599453
Cost after iteration 13000: 0.6931471805599453
Cost after iteration 14000: 0.6931471805599453

On the train set:
Accuracy: 0.5
On the test set:
Accuracy: 0.5

性能真的很差,成本也没有真正降低,算法的性能也不比随机猜测好。为什么?让我们来看看预测和决策边界的细节:

print ("predictions_train = " + str(predictions_train))
print ("predictions_test = " + str(predictions_test))

结果:

predictions_train = [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0]]
predictions_test = [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]

绘制图像:

plt.title("Model with Zeros initialization")
axes = plt.gca()
axes.set_xlim([-1.5,1.5])
axes.set_ylim([-1.5,1.5])
plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y.flatten())

结果:

该模型预测每个示例为0。

通常,将所有权重初始化为零会导致网络无法打破对称性。这意味着每一层中的每一个神经元都将学习相同的东西,你也可以为每一层训练一个n[l]= 1的神经网络,而这个网络并不比逻辑回归这样的线性分类器强大多少。

 

3 -随机初始化

为了打破对称性,让我们随机初始化权重。随机初始化后,每个神经元可以继续学习其输入的不同函数。在本练习中,您将看到如果权重随机初始化,但值非常大,会发生什么情况。

练习:执行以下功能,将您的权重初始化为大的随机值(按*10缩放),并将您的偏差初始化为零。使用 np.random.randn(..,..)* 10 代表权重和 np.zeros((.., ..)) 代表偏差。我们正在使用固定的 np.random.seed(..) 来确保您的“随机”权重与我们的匹配,所以不要担心如果运行几次代码,参数的初始值总是相同的。 

# GRADED FUNCTION: initialize_parameters_randomdef initialize_parameters_random(layers_dims):"""参数:layers_dims - 列表,模型的层数和对应每一层的节点的数量返回parameters - 包含了所有W和b的字典W1 - 权重矩阵,维度为(layers_dims[1], layers_dims[0])b1 - 偏置向量,维度为(layers_dims[1],1)···WL - 权重矩阵,维度为(layers_dims[L], layers_dims[L -1])b1 - 偏置向量,维度为(layers_dims[L],1)"""np.random.seed(3)               # This seed makes sure your "random" numbers will be the as oursparameters = {}L = len(layers_dims)            # integer representing the number of layersfor l in range(1, L):### START CODE HERE ### (≈ 2 lines of code)parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) * 10parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))### END CODE HERE ###return parameters

测试:

parameters = initialize_parameters_random([3, 2, 1])
print("W1 = " + str(parameters["W1"]))
print("b1 = " + str(parameters["b1"]))
print("W2 = " + str(parameters["W2"]))
print("b2 = " + str(parameters["b2"]))

结果:

W1 = [[ 17.88628473   4.36509851   0.96497468][-18.63492703  -2.77388203  -3.54758979]]
b1 = [[0.][0.]]
W2 = [[-0.82741481 -6.27000677]]
b2 = [[0.]]

运行以下代码,使用随机初始化在15,000次迭代中训练您的模型。

parameters = model(train_X, train_Y, initialization = "random")
print ("On the train set:")
predictions_train = predict(train_X, train_Y, parameters)
print ("On the test set:")
predictions_test = predict(test_X, test_Y, parameters)

结果:

Cost after iteration 0: inf
Cost after iteration 1000: 0.6250982793959966
Cost after iteration 2000: 0.5981216596703697
Cost after iteration 3000: 0.5638417572298645
Cost after iteration 4000: 0.5501703049199763
Cost after iteration 5000: 0.5444632909664456
Cost after iteration 6000: 0.5374513807000807
Cost after iteration 7000: 0.4764042074074983
Cost after iteration 8000: 0.39781492295092263
Cost after iteration 9000: 0.3934764028765484
Cost after iteration 10000: 0.3920295461882659
Cost after iteration 11000: 0.38924598135108
Cost after iteration 12000: 0.3861547485712325
Cost after iteration 13000: 0.384984728909703
Cost after iteration 14000: 0.3827828308349524

On the train set:
Accuracy: 0.83
On the test set:
Accuracy: 0.86

模型不再输出所有0。

print (predictions_train)
print (predictions_test)

结果:

[[1 0 1 1 0 0 1 1 1 1 1 0 1 0 0 1 0 1 1 0 0 0 1 0 1 1 1 1 1 1 0 1 1 0 0 11 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 1 1 1 00 0 0 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 0 1 1 0 1 0 1 1 0 1 1 01 0 1 1 0 0 1 0 0 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 0 1 1 0 0 1 1 00 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 1 0 1 0 1 1 1 1 0 1 1 11 0 1 0 1 0 1 1 1 1 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 0 1 1 1 0 1 0 1 0 0 10 1 1 0 1 1 0 1 1 0 1 1 1 0 1 1 1 1 0 1 0 0 1 1 0 1 1 1 0 0 0 1 1 0 1 11 1 0 1 1 0 1 1 1 0 0 1 0 0 0 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 11 1 1 1 0 0 0 1 1 1 1 0]]
[[1 1 1 1 0 1 0 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0 1 0 1 0 1 1 1 1 1 0 0 0 0 10 1 1 0 0 1 1 1 1 1 0 1 1 1 0 1 0 1 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 01 1 1 1 1 0 1 0 0 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0]]

绘制图像:

plt.title("Model with large random initialization")
axes = plt.gca()
axes.set_xlim([-1.5,1.5])
axes.set_ylim([-1.5,1.5])
plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y.flatten())

结果:

观察:

我们可以看到误差开始很高。这是因为由于具有较大的随机权重,最后一个激活(sigmoid)输出的结果非常接近于0或1,而当它出现错误时,它会导致非常高的损失。初始化参数如果没有很好地话会导致梯度消失、爆炸,这也会减慢优化算法。如果我们对这个网络进行更长时间的训练,我们将看到更好的结果,但是使用过大的随机数初始化会减慢优化的速度。

  总而言之,将权重初始化为非常大的时候其实效果并不好,下面我们试试小一点的参数值。

 

4- 抑梯度异常初始化

练习:通过初始化实现以下功能来初始化参数。 该函数类似于前面的 initialize_parameters_random(...) ,而这里我们会使用到这个公式来初始化参数。

# GRADED FUNCTION: initialize_parameters_hedef initialize_parameters_he(layers_dims):"""参数:layers_dims - 列表,模型的层数和对应每一层的节点的数量返回parameters - 包含了所有W和b的字典W1 - 权重矩阵,维度为(layers_dims[1], layers_dims[0])b1 - 偏置向量,维度为(layers_dims[1],1)···WL - 权重矩阵,维度为(layers_dims[L], layers_dims[L -1])b1 - 偏置向量,维度为(layers_dims[L],1)"""np.random.seed(3)parameters = {}L = len(layers_dims) - 1 # integer representing the number of layersfor l in range(1, L + 1):### START CODE HERE ### (≈ 2 lines of code)parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) * np.sqrt(2 / layers_dims[l - 1])parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))### END CODE HERE ###return parameters

测试:

parameters = initialize_parameters_he([2, 4, 1])
print("W1 = " + str(parameters["W1"]))
print("b1 = " + str(parameters["b1"]))
print("W2 = " + str(parameters["W2"]))
print("b2 = " + str(parameters["b2"]))

结果:

W1 = [[ 1.78862847  0.43650985][ 0.09649747 -1.8634927 ][-0.2773882  -0.35475898][-0.08274148 -0.62700068]]
b1 = [[0.][0.][0.][0.]]
W2 = [[-0.03098412 -0.33744411 -0.92904268  0.62552248]]
b2 = [[0.]]

运行下面的代码,使用抑梯度异常初始化在15,000次迭代中训练您的模型。

parameters = model(train_X, train_Y, initialization = "he")
print ("On the train set:")
predictions_train = predict(train_X, train_Y, parameters)
print ("On the test set:")
predictions_test = predict(test_X, test_Y, parameters)

结果:

Cost after iteration 0: 0.8830537463419761
Cost after iteration 1000: 0.6879825919728063
Cost after iteration 2000: 0.6751286264523371
Cost after iteration 3000: 0.6526117768893807
Cost after iteration 4000: 0.6082958970572938
Cost after iteration 5000: 0.5304944491717495
Cost after iteration 6000: 0.4138645817071795
Cost after iteration 7000: 0.31178034648444414
Cost after iteration 8000: 0.2369621533032257
Cost after iteration 9000: 0.18597287209206845
Cost after iteration 10000: 0.1501555628037181
Cost after iteration 11000: 0.12325079292273548
Cost after iteration 12000: 0.09917746546525937
Cost after iteration 13000: 0.08457055954024273
Cost after iteration 14000: 0.07357895962677366

On the train set:
Accuracy: 0.9933333333333333
On the test set:
Accuracy: 0.96

绘制图像:

plt.title("Model with He initialization")
axes = plt.gca()
axes.set_xlim([-1.5,1.5])
axes.set_ylim([-1.5,1.5])
plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y.flatten())

结果:

观察: 具有抑梯度异常初始化的模型在少量迭代中很好地分离了蓝色和红色点。

 

5 -结论

您已经看到了三种不同类型的初始化。对于相同的迭代次数和相同的超参数,比较结果是:

模型训练准确度问题
零初始化的三层神经网络50%不能打破对称性
大规模随机初始化的三层神经网络83%过大的权重
抑梯度异常初始化的三层神经网络99%推荐方法
http://www.lbrq.cn/news/1064449.html

相关文章:

  • 网站开发的进度控制计划表/泉州关键词搜索排名
  • 网络服务器设备/湖南seo推广
  • 灵宝网站制作工作室/百度竞价推广登陆
  • 网站设计与制作优点/企业网站开发
  • 西安企业网站制作公司/餐饮营销方案
  • 全国网站公安备案/seo专业实战培训
  • 个人博客网站实验报告/外贸网络推广
  • 网站网页设计收费/电商运营主要工作内容
  • 网页设计与制作商丘到的公司/天津seo招聘
  • 政府网站建设意见建议/企业网站seo方案
  • top域名的网站打不开/长沙seo优化排名推广
  • 网站推送/今天的新闻发布会
  • 岳阳做公司网站/中央新闻联播
  • 单页面网站可以做自适应网站吗/贵阳搜索引擎排名推广
  • 黑龙江做网站哪家好/上海网站排名seo公司哪家好
  • 旅游微网站建设/网站优化排名查询
  • 苹果14pro max价格/长沙网站seo优化
  • 广告公司做的网站字体侵权/咸阳seo公司
  • 做电影网站失败了/百度号注册官网
  • 开网站做赌博赚钱吗/企业推广方案
  • 会计证继续教育在哪个网站做/电商网站开发平台有哪些
  • 设计网站实现PDF在线阅读需要怎么做/排名优化软件点击
  • 网站介绍流程/竞价托管
  • 在机关网站建设会上讲话/百度快照有什么用
  • 零食公司建立网站的原因/it培训课程
  • 网站盈利方法/谷歌seo建站
  • wordpress建站实例视频/南京百度seo排名
  • 自适应h5网站/百度热榜实时热点
  • 微信开放api/seo关键词优化培训
  • 织梦模板网站好优化吗/网站排名优化查询
  • ref和reactive的区别
  • 【AI 加持下的 Python 编程实战 2_13】第九章:繁琐任务的自动化(中)——自动批量合并 PDF 文档
  • 日常--详细介绍qt Designer常用快捷键(详细图文)
  • 从零开始学Express,理解服务器,路由于中间件
  • 实战《从0开始使用SwiftUI搭建记账软件》- 2、SwiftUI 知识点详解与使用场景
  • 网页操作自动化解决方案:如何用Browser-Use+CPolar提升企业运营效率