首页 > 其他分享 >4.初始化参数

4.初始化参数

时间:2023-09-04 15:55:21浏览次数:33  
标签:layers 初始化 parameters dims train 参数 print

# 加载系统工具库
import numpy as np
import matplotlib.pyplot as plt
import sklearn
import sklearn.datasets

# 加载自定义的工具库
from init_utils import *

# 设置好画图工具
%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'

#########################################################

这段代码是一个Python脚本的一部分,它用于加载一些必要的库以及自定义的工具库,并配置了一些绘图参数。

  1. import numpy as np: 这一行导入了NumPy库,通常用于处理和计算多维数组,且将其命名为np以方便在代码中使用。

  2. import matplotlib.pyplot as plt: 这一行导入了Matplotlib库中的pyplot模块,用于创建和显示图形,将其命名为plt以方便在代码中使用。

  3. import sklearnimport sklearn.datasets: 这两行导入了Scikit-Learn库,一个用于机器学习的强大库。第二行导入了datasets模块,它包含了一些常用的数据集。

  4. from init_utils import *: 这一行从名为init_utils的自定义工具库中导入所有内容(使用*通配符),以便在后续代码中使用init_utils中的函数和工具。

  5. %matplotlib inline: 这是一个Jupyter Notebook的魔术命令,用于在Notebook中内联显示图形。如果您在Jupyter Notebook中运行这段代码,图形将在Notebook中直接显示。

  6. plt.rcParams['figure.figsize'] = (7.0, 4.0): 这一行设置了Matplotlib的默认图形大小为宽度7.0和高度4.0。这会影响后续绘图的默认尺寸。

  7. plt.rcParams['image.interpolation'] = 'nearest': 这一行设置了图像的插值方式为“nearest”,这意味着在显示图像时不进行插值,以保持图像的锐利性。

  8. plt.rcParams['image.cmap'] = 'gray': 这一行设置了图像的颜色映射为灰度('gray'),这将影响图像的颜色显示。

这段代码主要是为了配置工作环境,确保后续的绘图和数据处理能够顺利进行。

#########################################################

train_X, train_Y, test_X, test_Y = load_dataset()

#########################################################

这一行代码调用了名为load_dataset()的函数,并将其返回值分配给四个变量:train_Xtrain_Ytest_Xtest_Y

  • load_dataset(): 这是一个自定义函数,通常用于加载训练和测试数据集。该函数可能在您的代码库中的init_utils.py中定义。这个函数的具体实现细节我不清楚,因为它不在您提供的代码片段中。

  • train_X: 这是一个包含训练数据特征的NumPy数组。通常,它的形状为(特征数量, 训练样本数量),其中每列代表一个训练样本的特征。

  • train_Y: 这是一个包含训练数据标签(或目标)的NumPy数组。通常,它的形状为(1, 训练样本数量),其中每个元素代表对应训练样本的标签。

  • test_X: 这是一个包含测试数据特征的NumPy数组,与train_X类似,通常是形状为(特征数量, 测试样本数量)的数组。

  • test_Y: 这是一个包含测试数据标签的NumPy数组,与train_Y类似,通常是形状为(1, 测试样本数量)的数组。

这些变量用于存储训练和测试数据,以便后续的机器学习模型可以使用它们进行训练和测试。具体的数据内容和形状会根据您的数据集而有所不同,因此您可能需要查看load_dataset()函数的实现以获取更多关于数据的详细信息。

#########################################################

def model(X, Y, learning_rate=0.01, num_iterations=15000, print_cost=True, initialization="he"):
grads = {}
costs = []
m = X.shape[1]
layers_dims = [X.shape[0], 10, 5, 1] # 构建一个3层的神经网络

# 3种不同的初始化方法,后面会对这3种初始化方法进行详细介绍
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)

# 梯度下降训练参数
for i in range(0, num_iterations):
a3, cache = forward_propagation(X, parameters)
cost = compute_loss(a3, Y)
grads = backward_propagation(X, Y, cache)
parameters = update_parameters(parameters, grads, learning_rate)

if print_cost and i % 1000 == 0:
print("Cost after iteration {}: {}".format(i, cost))
costs.append(cost)

# 画出成本走向图
plt.plot(costs)
plt.ylabel('cost')
plt.xlabel('iterations (per hundreds)')
plt.title("Learning rate =" + str(learning_rate))
plt.show()

return parameters

#########################################################

这段代码定义了一个神经网络模型的训练函数 model

  • def model(X, Y, learning_rate=0.01, num_iterations=15000, print_cost=True, initialization="he"):

    • 这是一个函数的定义,该函数接受一系列参数:
      • X: 输入特征数据,形状为 (特征数量, 样本数量)
      • Y: 目标标签数据,形状为 (1, 样本数量)
      • learning_rate: 学习率,控制参数更新的步长,可选,默认为 0.01
      • num_iterations: 迭代次数,控制训练的轮数,可选,默认为 15000
      • print_cost: 是否打印成本(损失)的标志,如果为 True,则会每隔1000次迭代打印一次成本,可选,默认为 True
      • initialization: 参数初始化方法的选择,可选,默认为 "he",还有 "zeros""random" 两种选择。
  • grads = {}: 创建一个空字典,用于存储梯度。

  • costs = []: 创建一个空列表,用于存储成本(损失)值,以便后续绘制成本曲线。

  • m = X.shape[1]: 获取样本数量 m,它等于输入特征矩阵 X 的第二维度(即样本数量)。

  • layers_dims = [X.shape[0], 10, 5, 1]: 定义神经网络的层结构,这里是一个包含4个元素的列表,每个元素表示每一层的神经元数量。这个例子定义了一个包含输入层(特征数量)、一个隐藏层(10个神经元)、另一个隐藏层(5个神经元)和输出层(1个神经元)的3层神经网络。

  • 接下来,根据选择的初始化方法初始化神经网络的参数:

    • 如果 initialization"zeros",则调用 initialize_parameters_zeros(layers_dims) 初始化参数。
    • 如果 initialization"random",则调用 initialize_parameters_random(layers_dims) 初始化参数。
    • 如果 initialization"he",则调用 initialize_parameters_he(layers_dims) 初始化参数。
  • 然后,进入梯度下降的训练循环,循环 num_iterations 次:

    • 执行前向传播(forward_propagation)来计算预测值 a3 和缓存(用于反向传播)。
    • 计算当前成本(损失)值 cost
    • 执行反向传播(backward_propagation)来计算梯度。
    • 更新参数(update_parameters)使用梯度和学习率。
    • 如果 print_costTrue 并且迭代次数是1000的倍数,就会打印当前的成本值,并将其添加到 costs 列表中。
  • 最后,通过 Matplotlib 绘制成本曲线,然后返回训练后的参数。

这个函数的主要作用是用于训练一个具有多层神经网络结构的模型,并且可以选择不同的参数初始化方法。训练过程会记录成本值,最后将成本曲线可视化以帮助分析模型的性能。

#########################################################

def initialize_parameters_zeros(layers_dims):
parameters = {}
L = len(layers_dims)

for l in range(1, L):
parameters['W' + str(l)] = np.zeros((layers_dims[l], layers_dims[l - 1]))
parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))
return parameters

#########################################################

这段代码定义了一个函数 initialize_parameters_zeros(layers_dims),用于初始化神经网络的参数为零。

  • def initialize_parameters_zeros(layers_dims):

    • 这是一个函数的定义,接受一个参数 layers_dims,它是一个包含神经网络每一层的神经元数量的列表。
  • parameters = {}: 创建一个空字典 parameters,用于存储神经网络的参数(权重和偏差)。

  • L = len(layers_dims): 获取神经网络的层数(包括输入层和隐藏层)。

  • 接下来,使用一个循环来初始化每一层的参数:

    • for l in range(1, L):: 从第1层(隐藏层1)开始遍历到最后一层(输出层)。
    • parameters['W' + str(l)] = np.zeros((layers_dims[l], layers_dims[l - 1])): 初始化权重矩阵 W 为零矩阵,其形状由当前层和前一层的神经元数量决定。
    • parameters['b' + str(l)] = np.zeros((layers_dims[l], 1)): 初始化偏差向量 b 为零向量,其长度由当前层的神经元数量决定。
  • 最后,返回包含初始化参数的字典 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"]))

#########################################################

这段代码使用了之前定义的 initialize_parameters_zeros 函数来初始化神经网络的参数,并打印出初始化后的参数值。

  1. parameters = initialize_parameters_zeros([3,2,1]): 这一行调用了 initialize_parameters_zeros 函数,并传入一个包含神经网络每一层神经元数量的列表 [3, 2, 1]。这表示该神经网络有3层,输入层有3个神经元,隐藏层有2个神经元,输出层有1个神经元。函数将返回一个字典 parameters,其中包含了初始化后的参数。

  2. print("W1 = " + str(parameters["W1"])): 这一行打印出第1层的权重矩阵 W1 的值。

  3. print("b1 = " + str(parameters["b1"])): 这一行打印出第1层的偏差向量 b1 的值。

  4. print("W2 = " + str(parameters["W2"])): 这一行打印出第2层的权重矩阵 W2 的值。

  5. print("b2 = " + str(parameters["b2"])): 这一行打印出第2层的偏差向量 b2 的值。

由于 initialize_parameters_zeros 函数将所有的参数都初始化为零,因此您将会看到所有的权重和偏差的值都为零。这种初始化方法通常不是一个好选择,因为它容易导致对称性问题,使得每一层的神经元都学到相同的特征,从而影响模型的性能。通常情况下,我们会使用随机初始化来打破对称性,以便让神经网络更好地学习特征。

#########################################################

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) # 对训测试数据进行预测,并打印出准确度

#########################################################

这段代码使用了之前定义的神经网络模型 model 进行训练,并在训练集和测试集上进行预测,然后打印出预测的准确度。

  1. parameters = model(train_X, train_Y, initialization="zeros"): 这一行调用了 model 函数,使用了零初始化参数来训练神经网络。train_X 是训练集的特征,train_Y 是训练集的目标标签。函数将返回训练后的参数 parameters

  2. print("On the train set:"): 这一行打印出提示信息,指示下面的输出是关于训练集的。

  3. predictions_train = predict(train_X, train_Y, parameters): 这一行调用 predict 函数,使用训练后的参数 parameters 对训练集 train_X 进行预测。predict 函数将返回训练集的预测结果,并将其存储在变量 predictions_train 中。

  4. print("On the test set:"): 这一行打印出提示信息,指示下面的输出是关于测试集的。

  5. predictions_test = predict(test_X, test_Y, parameters): 这一行调用 predict 函数,使用训练后的参数 parameters 对测试集 test_X 进行预测。predict 函数将返回测试集的预测结果,并将其存储在变量 predictions_test 中。

通过这些步骤,您可以在训练集和测试集上评估模型的性能,查看模型的准确度。但需要注意的是,由于使用了零初始化,模型可能无法良好地拟合数据,因此准确度可能不高。通常情况下,随机初始化或其他更好的初始化方法会取得更好的结果。

#########################################################

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

#########################################################

打印出了训练集和测试集的预测结果

#########################################################

def initialize_parameters_random(layers_dims):
np.random.seed(3)
parameters = {}
L = len(layers_dims)

for l in range(1, L):
parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) * 10
parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))
return parameters

#########################################################

这段代码定义了一个函数 initialize_parameters_random(layers_dims),用于随机初始化神经网络的参数。-

  • def initialize_parameters_random(layers_dims):

    • 这是一个函数的定义,接受一个参数 layers_dims,它是一个包含神经网络每一层的神经元数量的列表。
  • np.random.seed(3): 这一行设置了随机数生成器的种子,以确保每次运行代码时都会得到相同的随机数。这是为了方便调试和比较不同运行之间的结果。

  • parameters = {}: 创建一个空字典 parameters,用于存储神经网络的参数(权重和偏差)。

  • L = len(layers_dims): 获取神经网络的层数(包括输入层和隐藏层)。

  • 接下来,使用一个循环来初始化每一层的参数:

    • for l in range(1, L):: 从第1层(隐藏层1)开始遍历到最后一层(输出层)。
    • parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) * 10: 初始化权重矩阵 W 为服从标准正态分布的随机数,并乘以10以增加随机数的幅度。这样做是为了确保权重的初始值具有较大的随机性,以打破对称性。
    • parameters['b' + str(l)] = np.zeros((layers_dims[l], 1)): 初始化偏差向量 b 为零向量,其长度由当前层的神经元数量决定。
  • 最后,返回包含初始化参数的字典 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"]))

#########################################################

这段代码使用了之前定义的 initialize_parameters_random 函数来随机初始化神经网络的参数,并打印出初始化后的参数值。

  1. parameters = initialize_parameters_random([3, 2, 1]): 这一行调用了 initialize_parameters_random 函数,并传入一个包含神经网络每一层神经元数量的列表 [3, 2, 1]。这表示该神经网络有3层,输入层有3个神经元,隐藏层有2个神经元,输出层有1个神经元。函数将返回一个字典 parameters,其中包含了随机初始化后的参数。

  2. print("W1 = " + str(parameters["W1"])): 这一行打印出第1层的权重矩阵 W1 的值。

  3. print("b1 = " + str(parameters["b1"])): 这一行打印出第1层的偏差向量 b1 的值。

  4. print("W2 = " + str(parameters["W2"])): 这一行打印出第2层的权重矩阵 W2 的值。

  5. print("b2 = " + str(parameters["b2"])): 这一行打印出第2层的偏差向量 b2 的值。

由于使用了随机初始化,您将会看到每一层的权重矩阵都包含随机数值,而偏差向量都被初始化为零。这种初始化方法有助于打破对称性,使得每个神经元都可以学习不同的特征。通常情况下,这是一种更好的初始化方法,以提高神经网络的性能。

#########################################################

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)

#########################################################

这段代码使用了随机初始化参数的神经网络模型 model 进行训练,并在训练集和测试集上进行了预测,然后打印出预测的准确度。

  1. parameters = model(train_X, train_Y, initialization="random"): 这一行调用了 model 函数,使用了随机初始化的参数来训练神经网络。train_X 是训练集的特征,train_Y 是训练集的目标标签。函数将返回训练后的参数 parameters

  2. print("On the train set:"): 这一行打印出提示信息,指示下面的输出是关于训练集的。

  3. predictions_train = predict(train_X, train_Y, parameters): 这一行调用 predict 函数,使用训练后的参数 parameters 对训练集 train_X 进行预测。predict 函数将返回训练集的预测结果,并将其存储在变量 predictions_train 中。

  4. print("On the test set:"): 这一行打印出提示信息,指示下面的输出是关于测试集的。

  5. predictions_test = predict(test_X, test_Y, parameters): 这一行调用 predict 函数,使用训练后的参数 parameters 对测试集 test_X 进行预测。predict 函数将返回测试集的预测结果,并将其存储在变量 predictions_test 中。

通过这些步骤,您可以在训练集和测试集上评估模型的性能,查看模型的准确度。由于使用了随机初始化,模型可能能够更好地拟合数据,因此准确度可能会有所提高,相对于零初始化的模型。如果您希望进一步分析模型性能或计算其他性能指标,可以使用这些预测结果来执行相应的计算。

#########################################################

print(predictions_train)

print(predictions_test)

#########################################################

打印出训练集和测试集的预测结果

#########################################################

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)

#########################################################

这段代码使用 Matplotlib 绘制模型的决策边界图,以可视化模型的性能。

  1. plt.title("Model with large random initialization"): 这一行设置图表的标题为 "Model with large random initialization",以描述正在绘制的模型。

  2. axes = plt.gca(): 这一行获取当前图表的坐标轴对象,以便后续设置坐标轴的范围。

  3. axes.set_xlim([-1.5, 1.5])axes.set_ylim([-1.5, 1.5]): 这两行设置 x 轴和 y 轴的范围,将坐标轴限制在 -1.5 到 1.5 的范围内,以确保决策边界图在指定范围内绘制。

  4. plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y): 这一行调用 plot_decision_boundary 函数来绘制决策边界。该函数接受三个参数:

    • 第一个参数是一个 lambda 函数,用于预测给定输入 x 的标签。这里使用了 predict_dec 函数来生成预测结果。
    • 第二个参数是训练集的特征 train_X
    • 第三个参数是训练集的目标标签 train_Y

plot_decision_boundary 函数的目的是根据模型的预测结果绘制决策边界,以便直观地了解模型在特征空间中的决策边界位置。

通过这些代码,您将获得一个决策边界图,它将显示出模型在特征空间中如何划分不同类别的样本。这有助于您对模型的性能和决策边界的形状有更直观的理解。

#########################################################

def initialize_parameters_he(layers_dims):
np.random.seed(3)
parameters = {}
L = len(layers_dims) - 1

for l in range(1, L + 1):
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))

return parameters

#########################################################

 

这段代码定义了一个函数 initialize_parameters_he(layers_dims),用于使用He初始化方法来初始化神经网络的参数。

  • def initialize_parameters_he(layers_dims):

    • 这是一个函数的定义,接受一个参数 layers_dims,它是一个包含神经网络每一层的神经元数量的列表。
  • np.random.seed(3): 这一行设置了随机数生成器的种子,以确保每次运行代码时都会得到相同的随机数。这是为了方便调试和比较不同运行之间的结果。

  • parameters = {}: 创建一个空字典 parameters,用于存储神经网络的参数(权重和偏差)。

  • L = len(layers_dims) - 1: 获取神经网络的层数(包括输入层和隐藏层),并将其存储在变量 L 中。这里减去1是因为输入层不包括在 layers_dims 列表中。

  • 接下来,使用一个循环来初始化每一层的参数:

    • for l in range(1, L + 1): 从第1层(隐藏层1)开始遍历到最后一层。
    • parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) * np.sqrt(2 / layers_dims[l - 1]): 初始化权重矩阵 W 为服从标准正态分布的随机数,然后乘以一个缩放因子 np.sqrt(2 / layers_dims[l - 1])。这个缩放因子是He初始化的关键部分,它有助于确保权重的初始值具有较好的范围,以便更好地训练神经网络。
    • parameters['b' + str(l)] = np.zeros((layers_dims[l], 1)): 初始化偏差向量 b 为零向量,其长度由当前层的神经元数量决定。
  • 最后,返回包含初始化参数的字典 parameters

He初始化方法通常用于深度神经网络,以帮助梯度在网络中更好地传播,有助于更快地收敛和更好的性能。

#########################################################

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"]))

#########################################################

这段代码使用了之前定义的 initialize_parameters_he 函数来使用He初始化方法初始化神经网络的参数,并打印出初始化后的参数值。

  1. parameters = initialize_parameters_he([2, 4, 1]): 这一行调用了 initialize_parameters_he 函数,并传入一个包含神经网络每一层神经元数量的列表 [2, 4, 1]。这表示该神经网络有3层,输入层有2个神经元,隐藏层有4个神经元,输出层有1个神经元。函数将返回一个字典 parameters,其中包含了使用He初始化方法初始化后的参数。

  2. print("W1 = " + str(parameters["W1"])): 这一行打印出第1层的权重矩阵 W1 的值。

  3. print("b1 = " + str(parameters["b1"])): 这一行打印出第1层的偏差向量 b1 的值。

  4. print("W2 = " + str(parameters["W2"])): 这一行打印出第2层的权重矩阵 W2 的值。

  5. print("b2 = " + str(parameters["b2"])): 这一行打印出第2层的偏差向量 b2 的值。

由于使用了He初始化方法,您将会看到每一层的权重矩阵都包含了具有较好范围的随机数值,而偏差向量都被初始化为零。He初始化有助于确保权重的初始值适合深度神经网络,可以改善训练的效果。

#########################################################

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)

#########################################################

这段代码使用了使用He初始化方法初始化参数的神经网络模型 model 进行训练,并在训练集和测试集上进行了预测,然后打印出预测的准确度。

  1. parameters = model(train_X, train_Y, initialization="he"): 这一行调用了 model 函数,使用了He初始化的参数来训练神经网络。train_X 是训练集的特征,train_Y 是训练集的目标标签。函数将返回训练后的参数 parameters

  2. print("On the train set:"): 这一行打印出提示信息,指示下面的输出是关于训练集的。

  3. predictions_train = predict(train_X, train_Y, parameters): 这一行调用 predict 函数,使用训练后的参数 parameters 对训练集 train_X 进行预测。predict 函数将返回训练集的预测结果,并将其存储在变量 predictions_train 中。

  4. print("On the test set:"): 这一行打印出提示信息,指示下面的输出是关于测试集的。

  5. predictions_test = predict(test_X, test_Y, parameters): 这一行调用 predict 函数,使用训练后的参数 parameters 对测试集 test_X 进行预测。predict 函数将返回测试集的预测结果,并将其存储在变量 predictions_test 中。

通过这些步骤,您可以在训练集和测试集上评估使用He初始化的模型的性能,查看模型的准确度。由于使用了He初始化,模型可能能够更好地拟合数据,因此准确度可能会有所提高,相对于其他初始化方法。如果您希望进一步分析模型性能或计算其他性能指标,可以使用这些预测结果来执行相应的计算。

#########################################################

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)

#########################################################

这段代码使用 Matplotlib 绘制了使用He初始化的神经网络模型的决策边界图,以可视化模型的性能。

  1. plt.title("Model with He initialization"): 这一行设置图表的标题为 "Model with He initialization",以描述正在绘制的模型。

  2. axes = plt.gca(): 这一行获取当前图表的坐标轴对象,以便后续设置坐标轴的范围。

  3. axes.set_xlim([-1.5, 1.5])axes.set_ylim([-1.5, 1.5]): 这两行设置 x 轴和 y 轴的范围,将坐标轴限制在 -1.5 到 1.5 的范围内,以确保决策边界图在指定范围内绘制。

  4. plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y): 这一行调用 plot_decision_boundary 函数来绘制决策边界。该函数接受三个参数:

    • 第一个参数是一个 lambda 函数,用于预测给定输入 x 的标签。这里使用了 predict_dec 函数来生成预测结果。
    • 第二个参数是训练集的特征 train_X
    • 第三个参数是训练集的目标标签 train_Y

plot_decision_boundary 函数的目的是根据模型的预测结果绘制决策边界,以便直观地了解模型在特征空间中的决策边界位置。

通过这些代码,您将获得一个决策边界图,它将显示出使用He初始化的模型在特征空间中如何划分不同类别的样本。这有助于您对模型的性能和决策边界的形状有更直观的理解。

 

标签:layers,初始化,parameters,dims,train,参数,print
From: https://www.cnblogs.com/wzbzk/p/17677293.html

相关文章

  • 几句话弄清楚Java参数传值还是传引用
    作者:fbysss关键字:Java传值传引用这是个老生常谈的问题了,引起过无数争论,但可以说一直没有一个令人满意的回答。有些人非要故弄玄虚,把传引用说成是栈里面放的是引用的值,说只有传值没有传引用,那看看这句经典名言吧:O'Reilly'sJavainaNutshellbyDavidFlanagan(seeResources)......
  • vue3 使用vue-router 进行网页跳转以及获取问号后面的参数
    关键代码:constrouter=useRouter()constauthor='myname'router.push({name:'Edit',query:{author}})constroute=useRoute()constvalue=route.query.key详细步骤:0.Initialgitclonehttps://github.com/element-plus/element-plus-v......
  • cmake 命令行带参数
    CMake命令行可以带有一些参数,用于控制和配置CMake的行为。这些参数可以在执行cmake命令时传递给CMake。以下是一些常用的CMake命令行参数:-D:用于设置CMake变量。例如,-DVAR_NAME=VALUE可以设置一个CMake变量的值cmake-DVAR_NAME=VALUEpath_to_source_directory-G......
  • 常用总线技术基本参数对比
    总线类型CANCANFD以太网100Base-T1以太网1000Base-T1FlexRay信道数11112带宽能力上限/bps1M1M+5M100M1000M单通道10M带宽使用上限/bps500K500K+2M100M1000M2.5M、5M、10M数据区长度/Bytes1-81-6464-150064-1500254网络介入机制半双......
  • vue 参数父传子 Props 实例
    1,子组件<template><h1>props传递参数</h1><p>{{title}}</p><ul><liv-for="iteminnelist">{{item}}</li></ul></template><script>exportdefault{name:"myco......
  • linux教程:vm.max_map_count参数详解
    vm.max_map_count是一个与内核虚拟内存子系统相关的参数,用于控制进程可以拥有的内存映射区域的最大数量。它通常用于限制一个进程可以打开的文件数量,特别是在使用大量内存映射文件的情况下。在Linux系统上,vm.max_map_count参数的默认值通常是较小的数值,例如65530。然而,对于一些需要......
  • Prism项目初始化与项目结构
    Prism简介Prism框架适用于WPF和XamarinForms中构建松散耦合、可维护和可测试的应用程序。Prism提供了一组设计模式的实现,这些设计模式有助于编写结构良好且可维护的xaml应用程序,功能包括:视图模型定位器(ViewModelLocation)MVVM(通知)命令(Commands)事件聚合器(EventAggr......
  • java线程池七大参数(转)
    转:https://blog.csdn.net/ye17186/article/details/89467919从源码来看,线程池构造有七个参数,corePoolSize,maximumPoolSize,keepAliveTime,unit,workQueue,threadFactory,handler一、corePoolSize核心线程池大小,线程池会维护一个最小线程数量,即使这些线程空闲,也不会被销......
  • php:查看安装时的编译参数(php 8.2.5)
    一,用-i参数[liuhongdi@img~]$/usr/local/soft/php8.2.5/bin/php-i|grepconfigureConfigureCommand=>  './configure'  '--prefix=/usr/local/soft/php8.2.5''--with-config-file-path=/usr/local/soft/php8.2.5/etc''--with-c......
  • 通过调整解码器参数,EasyPlayer.js可以实现H.265音频解码
    EasyPlayer是一款稳定且流畅的流媒体播放器,它能够支持H.264和H.265视频播放。该播放器能够处理各种视频流格式,包括RTSP、RTMP、HLS、FLV和WebRTC等。EasyPlayer具备多个版本,例如EasyPlayer-RTSP、EasyPlayer.js和EasyPlayerPro,以满足不同用户在不同场景下的需求。此外,EasyPlayer还......