【吴恩达课后编程作业】第三周 (个人笔记)
声明
本文用于记录博主学习之中遇到的问题,希望能帮到遇到同样问题的人。
课后编程作业参考
【中文】【吴恩达课后编程作业】Course 1 - 神经网络和深度学习 - 第三周作业
遇到的问题
首先在定义神经网络结构中,测试layer_sizes时,显示输出层的节点数量为: n_y = 2
=========================测试layer_sizes=========================
输入层的节点数量为: n_x = 5
隐藏层的节点数量为: n_h = 4
输出层的节点数量为: n_y = 2
然后初始化模型的参数中,测试initialize_parameters时,发现W2的维度为(1,4)
=========================测试initialize_parameters=========================
W1 = [[-0.00416758 -0.00056267]
[-0.02136196 0.01640271]
[-0.01793436 -0.00841747]
[ 0.00502881 -0.01245288]]
b1 = [[ 0.]
[ 0.]
[ 0.]
[ 0.]]
W2 = [[-0.01057952 -0.00909008 0.00551454 0.02292208]]
b2 = [[ 0.]]
在initialize_parameters函数的注释中写道:W2 - 权重矩阵,维度为(n_y,n_h)
在代码中W2 = np.random.randn(n_y,n_h) * 0.01
好像无论怎么看W2的维度都应该是(2,4)而不是(1,4),当时被这个问题在困扰了好一会
解决
在测试layer_sizes代码中:
print("=========================测试layer_sizes=========================")
X_asses , Y_asses = layer_sizes_test_case()
(n_x,n_h,n_y) = layer_sizes(X_asses,Y_asses)
print("输入层的节点数量为: n_x = " + str(n_x))
print("隐藏层的节点数量为: n_h = " + str(n_h))
print("输出层的节点数量为: n_y = " + str(n_y))
可知X_asses,Y_asses来自于layer_sizes_test_case()
而在测试initialize_parameters代码中:
#测试initialize_parameters
print("=========================测试initialize_parameters=========================")
n_x , n_h , n_y = initialize_parameters_test_case()
parameters = initialize_parameters(n_x , n_h , n_y)
print("W1 = " + str(parameters["W1"]))
print("b1 = " + str(parameters["b1"]))
print("W2 = " + str(parameters["W2"]))
print("b2 = " + str(parameters["b2"]))
n_x , n_h , n_y来自于initialize_parameters_test_case()
打开testCase.py,找到这两个函数
def layer_sizes_test_case():
np.random.seed(1)
X_assess = np.random.randn(5, 3)
Y_assess = np.random.randn(2, 3)
return X_assess, Y_assess
def initialize_parameters_test_case():
n_x, n_h, n_y = 2, 4, 1
return n_x, n_h, n_y
发现在initialize_parameters_test_case()中将n_y定义为1,但是在layer_sizes_test_case()中将 Y_assess = np.random.randn(2, 3),所以才会引起之前的误会。
不过目前也只处于知其然但不知其所以然的状态,为何要这么定义两个不同的n_y,求大神解答!!