Neural network 带衰减的前向传播 我正在通过安得烈学习新的深度学习课程。

Neural network 带衰减的前向传播 我正在通过安得烈学习新的深度学习课程。,neural-network,conv-neural-network,Neural Network,Conv Neural Network,我们正在实施以下代码: def前向传播带衰减(X,参数,保持概率=0.5): np.随机种子(1) #检索参数 W1=参数[“W1”] b1=参数[“b1”] W2=参数[“W2”] b2=参数[“b2”] W3=参数[“W3”] b3=参数[“b3”] #线性->RELU->线性->RELU->线性->乙状结肠 Z1=np.点(W1,X)+b1 A1=relu(Z1) ###此处开始代码#####(约4行)#下面的步骤1-4与上面描述的步骤1-4相对应。 D1=np.random.rand(*

我们正在实施以下代码:

def前向传播带衰减(X,参数,保持概率=0.5):

np.随机种子(1)

#检索参数
W1=参数[“W1”]
b1=参数[“b1”]
W2=参数[“W2”]
b2=参数[“b2”]
W3=参数[“W3”]
b3=参数[“b3”]
#线性->RELU->线性->RELU->线性->乙状结肠
Z1=np.点(W1,X)+b1
A1=relu(Z1)
###此处开始代码#####(约4行)#下面的步骤1-4与上面描述的步骤1-4相对应。
D1=np.random.rand(*A1.shape)#步骤1:初始化矩阵D1=np.random.rand(…,…)
D1=(D1<0.5)#步骤2:将D1的条目转换为0或1(使用keep_prob作为阈值)
A1=A1*D1#步骤3:关闭A1的一些神经元
A1=A1/keep_prob#步骤4:衡量尚未关闭的神经元的价值
###结束代码在这里###
Z2=np.dot(W2,A1)+b2
A2=relu(Z2)
###在此处开始代码####(约4行)
D2=np.random.rand(*A2.shape)#步骤1:初始化矩阵D2=np.random.rand(…,…)
D2=(D2<0.5)#步骤2:将D2的条目转换为0或1(使用keep_prob作为阈值)
A2=A2*D2#步骤3:关闭A2的一些神经元
A2=A2/keep_prob#第4步:衡量尚未关闭的神经元的价值
###结束代码在这里###
Z3=np.dot(W3,A2)+b3
A3=乙状结肠(Z3)
缓存=(Z1、D1、A1、W1、b1、Z2、D2、A2、W2、b2、Z3、A3、W3、b3)
返回A3,缓存
X_assessment,参数=前向_传播_与_辍学_测试_案例()

A3,高速缓存=前向传播,带辍学(X\u评估,参数,保持概率=0.7) 打印(“A3=“+str(A3))

我的产出是:

A3=[[0.36974721 0.49683389 0.04565099 0.49683389 0.36974721]]

预期产出应为:

A3[[0.36974721 0.00305176 0.04565099 0.49683389 0.36974721]]

只有一个数字不同。你知道为什么吗


我认为这是因为我塑造D1和D2的方式。

我认为这是因为你把D1=(D1<0.5)和D2=(D2<0.5)

你需要把“keep_prob”改为0.5,我想这是因为你把D1=(D1<0.5)和D2=(D2<0.5)

你需要把“keep_prob”改为0.5

我有相同的代码并且得到了正确的结果。你试过重新运行笔记本中以前的所有单元格并检查所有内容是否都已就绪吗?@IUF我没有合上括号。是的,代码很好。谢谢我有相同的代码,并且得到了正确的结果。你试过重新运行笔记本中以前的所有单元格并检查所有内容是否都已就绪吗?@IUF我没有合上括号。是的,代码很好。谢谢
# retrieve parameters
W1 = parameters["W1"]
b1 = parameters["b1"]
W2 = parameters["W2"]
b2 = parameters["b2"]
W3 = parameters["W3"]
b3 = parameters["b3"]

# LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID
Z1 = np.dot(W1, X) + b1
A1 = relu(Z1)
### START CODE HERE ### (approx. 4 lines)         # Steps 1-4 below correspond to the Steps 1-4 described above. 
D1 = np.random.rand(*A1.shape)                                # Step 1: initialize matrix D1 = np.random.rand(..., ...)
D1 = (D1 < 0.5)                                        # Step 2: convert entries of D1 to 0 or 1 (using keep_prob as the threshold)
A1 = A1*D1                                        # Step 3: shut down some neurons of A1
A1 = A1 / keep_prob                                         # Step 4: scale the value of neurons that haven't been shut down
### END CODE HERE ###
Z2 = np.dot(W2, A1) + b2
A2 = relu(Z2)
### START CODE HERE ### (approx. 4 lines)
D2 =np.random.rand(*A2.shape)                                        # Step 1: initialize matrix D2 = np.random.rand(..., ...)
D2 = (D2 < 0.5)                                        # Step 2: convert entries of D2 to 0 or 1 (using keep_prob as the threshold)
A2 = A2 * D2                                         # Step 3: shut down some neurons of A2
A2 = A2 / keep_prob                                         # Step 4: scale the value of neurons that haven't been shut down
### END CODE HERE ###
Z3 = np.dot(W3, A2) + b3
A3 = sigmoid(Z3)

cache = (Z1, D1, A1, W1, b1, Z2, D2, A2, W2, b2, Z3, A3, W3, b3)

return A3, cache