# 加载系统工具库
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脚本的一部分,它用于加载一些必要的库以及自定义的工具库,并配置了一些绘图参数。
-
import numpy as np
: 这一行导入了NumPy库,通常用于处理和计算多维数组,且将其命名为np
以方便在代码中使用。 -
import matplotlib.pyplot as plt
: 这一行导入了Matplotlib库中的pyplot
模块,用于创建和显示图形,将其命名为plt
以方便在代码中使用。 -
import sklearn
和import sklearn.datasets
: 这两行导入了Scikit-Learn库,一个用于机器学习的强大库。第二行导入了datasets
模块,它包含了一些常用的数据集。 -
from init_utils import *
: 这一行从名为init_utils
的自定义工具库中导入所有内容(使用*
通配符),以便在后续代码中使用init_utils
中的函数和工具。 -
%matplotlib inline
: 这是一个Jupyter Notebook的魔术命令,用于在Notebook中内联显示图形。如果您在Jupyter Notebook中运行这段代码,图形将在Notebook中直接显示。 -
plt.rcParams['figure.figsize'] = (7.0, 4.0)
: 这一行设置了Matplotlib的默认图形大小为宽度7.0和高度4.0。这会影响后续绘图的默认尺寸。 -
plt.rcParams['image.interpolation'] = 'nearest'
: 这一行设置了图像的插值方式为“nearest”,这意味着在显示图像时不进行插值,以保持图像的锐利性。 -
plt.rcParams['image.cmap'] = 'gray'
: 这一行设置了图像的颜色映射为灰度('gray'),这将影响图像的颜色显示。
这段代码主要是为了配置工作环境,确保后续的绘图和数据处理能够顺利进行。
#########################################################
train_X, train_Y, test_X, test_Y = load_dataset()
#########################################################
这一行代码调用了名为load_dataset()
的函数,并将其返回值分配给四个变量:train_X
、train_Y
、test_X
和test_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_cost
为True
并且迭代次数是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
函数来初始化神经网络的参数,并打印出初始化后的参数值。
-
parameters = initialize_parameters_zeros([3,2,1])
: 这一行调用了initialize_parameters_zeros
函数,并传入一个包含神经网络每一层神经元数量的列表[3, 2, 1]
。这表示该神经网络有3层,输入层有3个神经元,隐藏层有2个神经元,输出层有1个神经元。函数将返回一个字典parameters
,其中包含了初始化后的参数。 -
print("W1 = " + str(parameters["W1"]))
: 这一行打印出第1层的权重矩阵W1
的值。 -
print("b1 = " + str(parameters["b1"]))
: 这一行打印出第1层的偏差向量b1
的值。 -
print("W2 = " + str(parameters["W2"]))
: 这一行打印出第2层的权重矩阵W2
的值。 -
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
进行训练,并在训练集和测试集上进行预测,然后打印出预测的准确度。
-
parameters = model(train_X, train_Y, initialization="zeros")
: 这一行调用了model
函数,使用了零初始化参数来训练神经网络。train_X
是训练集的特征,train_Y
是训练集的目标标签。函数将返回训练后的参数parameters
。 -
print("On the train set:")
: 这一行打印出提示信息,指示下面的输出是关于训练集的。 -
predictions_train = predict(train_X, train_Y, parameters)
: 这一行调用predict
函数,使用训练后的参数parameters
对训练集train_X
进行预测。predict
函数将返回训练集的预测结果,并将其存储在变量predictions_train
中。 -
print("On the test set:")
: 这一行打印出提示信息,指示下面的输出是关于测试集的。 -
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
函数来随机初始化神经网络的参数,并打印出初始化后的参数值。
-
parameters = initialize_parameters_random([3, 2, 1])
: 这一行调用了initialize_parameters_random
函数,并传入一个包含神经网络每一层神经元数量的列表[3, 2, 1]
。这表示该神经网络有3层,输入层有3个神经元,隐藏层有2个神经元,输出层有1个神经元。函数将返回一个字典parameters
,其中包含了随机初始化后的参数。 -
print("W1 = " + str(parameters["W1"]))
: 这一行打印出第1层的权重矩阵W1
的值。 -
print("b1 = " + str(parameters["b1"]))
: 这一行打印出第1层的偏差向量b1
的值。 -
print("W2 = " + str(parameters["W2"]))
: 这一行打印出第2层的权重矩阵W2
的值。 -
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
进行训练,并在训练集和测试集上进行了预测,然后打印出预测的准确度。
-
parameters = model(train_X, train_Y, initialization="random")
: 这一行调用了model
函数,使用了随机初始化的参数来训练神经网络。train_X
是训练集的特征,train_Y
是训练集的目标标签。函数将返回训练后的参数parameters
。 -
print("On the train set:")
: 这一行打印出提示信息,指示下面的输出是关于训练集的。 -
predictions_train = predict(train_X, train_Y, parameters)
: 这一行调用predict
函数,使用训练后的参数parameters
对训练集train_X
进行预测。predict
函数将返回训练集的预测结果,并将其存储在变量predictions_train
中。 -
print("On the test set:")
: 这一行打印出提示信息,指示下面的输出是关于测试集的。 -
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 绘制模型的决策边界图,以可视化模型的性能。
-
plt.title("Model with large random initialization")
: 这一行设置图表的标题为 "Model with large random initialization",以描述正在绘制的模型。 -
axes = plt.gca()
: 这一行获取当前图表的坐标轴对象,以便后续设置坐标轴的范围。 -
axes.set_xlim([-1.5, 1.5])
和axes.set_ylim([-1.5, 1.5])
: 这两行设置 x 轴和 y 轴的范围,将坐标轴限制在 -1.5 到 1.5 的范围内,以确保决策边界图在指定范围内绘制。 -
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
。
- 第一个参数是一个 lambda 函数,用于预测给定输入
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初始化方法初始化神经网络的参数,并打印出初始化后的参数值。
-
parameters = initialize_parameters_he([2, 4, 1])
: 这一行调用了initialize_parameters_he
函数,并传入一个包含神经网络每一层神经元数量的列表[2, 4, 1]
。这表示该神经网络有3层,输入层有2个神经元,隐藏层有4个神经元,输出层有1个神经元。函数将返回一个字典parameters
,其中包含了使用He初始化方法初始化后的参数。 -
print("W1 = " + str(parameters["W1"]))
: 这一行打印出第1层的权重矩阵W1
的值。 -
print("b1 = " + str(parameters["b1"]))
: 这一行打印出第1层的偏差向量b1
的值。 -
print("W2 = " + str(parameters["W2"]))
: 这一行打印出第2层的权重矩阵W2
的值。 -
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
进行训练,并在训练集和测试集上进行了预测,然后打印出预测的准确度。
-
parameters = model(train_X, train_Y, initialization="he")
: 这一行调用了model
函数,使用了He初始化的参数来训练神经网络。train_X
是训练集的特征,train_Y
是训练集的目标标签。函数将返回训练后的参数parameters
。 -
print("On the train set:")
: 这一行打印出提示信息,指示下面的输出是关于训练集的。 -
predictions_train = predict(train_X, train_Y, parameters)
: 这一行调用predict
函数,使用训练后的参数parameters
对训练集train_X
进行预测。predict
函数将返回训练集的预测结果,并将其存储在变量predictions_train
中。 -
print("On the test set:")
: 这一行打印出提示信息,指示下面的输出是关于测试集的。 -
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初始化的神经网络模型的决策边界图,以可视化模型的性能。
-
plt.title("Model with He initialization")
: 这一行设置图表的标题为 "Model with He initialization",以描述正在绘制的模型。 -
axes = plt.gca()
: 这一行获取当前图表的坐标轴对象,以便后续设置坐标轴的范围。 -
axes.set_xlim([-1.5, 1.5])
和axes.set_ylim([-1.5, 1.5])
: 这两行设置 x 轴和 y 轴的范围,将坐标轴限制在 -1.5 到 1.5 的范围内,以确保决策边界图在指定范围内绘制。 -
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
。
- 第一个参数是一个 lambda 函数,用于预测给定输入
plot_decision_boundary
函数的目的是根据模型的预测结果绘制决策边界,以便直观地了解模型在特征空间中的决策边界位置。
通过这些代码,您将获得一个决策边界图,它将显示出使用He初始化的模型在特征空间中如何划分不同类别的样本。这有助于您对模型的性能和决策边界的形状有更直观的理解。
标签:layers,初始化,parameters,dims,train,参数,print From: https://www.cnblogs.com/wzbzk/p/17677293.html