关于参数传递加引号问题,是不是传字符类型的值必须加引号
那系统是怎么识别是什么类型的呢
比如def info(name,age)是不是调用的时候参数name就需加引号
遇到了下面的问题:
def linear_activation_forward(A_prev,W,b,activation):
"""
实现LINREAR->ACTIVATION这一层的前向传播
:param A_prev: 来自前一层的预激活量,维度为(上一层的节点数量,示例数)
:param W: 权重矩阵,维度为(当前层的节点数量,前一层的节点数量)
:param b: 偏向量,numpy矩阵,维度为(当前层的节点数量,1)
:param activation: 选择在此层中使用的激活函数名,字符串类型,【sigmoid|relu】
:return: A-激活函数的输出,也成为激活后的值
cache-一个包含"linear_cache"和"activation_cache"的字典,我们需要存储它以有效计算后向传播
"""
if activation=="sigmoid":
Z,linear_cache=linear_forward(A_prev,W,b)
A,activation_cache=sigmoid(Z)
elif activation=="relu":
Z, linear_cache = linear_forward(A_prev, W, b)
A, activation_cache = relu(Z)
#assert(AA.shape==(W.shape[0],A_prev.shape[1]))
cache=(linear_cache,activation_cache)
return A,cache
def L_model_forward(X,parameters):
"""
实现[LINEAR->RELU]*(L-1)->LINEAR->SIGMOID计算前向传播,也就是多层网络的前向传播
:param X:输入数据(输入节点数量,示例数)
:param parameters:initialize_parameters_deep()的输出
:return:AL-最后的激活值
caches-包含以下内容的缓存列表
linear_relu_forward()的每个cache(有L-1个,所因为从0到L-2)
linear_sigmoid_forward()的每个cache(只有一个,索引为L-1)
"""
caches = []
A = X
L = len(parameters) // 2
for l in range(1,L):
A_prev = A
A, cache = linear_activation_forward(A_prev, parameters['W' + str(l)], parameters['b' + str(l)], "relu")
caches.append(cache)
AL, cache = linear_activation_forward(A, parameters['W' + str(L)], parameters['b' + str(L)], ==***sigmoid***==)
caches.append(cache)
assert(AL.shape==(1,X.shape[1]))
return AL,caches
就是因为调用linear_activation_forward()函数时,第四个参数没有加引号,然后if语句没有识别,也就没有执行,出现了如下报错:UnboundLocalError: local variable ‘linear_cache’ referenced before assignment(本地变量在引用前没有被定义)
真的找了好久这个错误才发现,上面是我的猜测,找了资料也没找到相关解释,先记录一下,学完更多的python,回来再解决。