Numpy中的Sigmoid函数

jv4diomz  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(179)

为了快速计算,我必须用Numpy实现我的Sigmoid函数。这是下面的代码

def sigmoid(Z):
    """
    Implements the sigmoid activation in bumpy

    Arguments:
    Z -- numpy array of any shape

    Returns:
    A -- output of sigmoid(z), same shape as Z
    cache -- returns Z, useful during backpropagation
    """

    cache=Z

    print(type(Z))
    print(Z)
    A=1/(1+(np.exp((-Z))))

    return A, cache

还有一些相关信息:

Z=(np.matmul(W,A)+b)

Z的类型是:

<class 'numpy.ndarray'>

遗憾的是,我得到了一个:“一元操作数类型不正确--‘tuple’”我已经尝试过解决这个问题,但没有成功。我非常感谢您的建议。最好的

kulphzqa

kulphzqa1#

**这对我很有效。**我认为不需要使用缓存,因为您已经初始化了它。尝试下面的代码。

import matplotlib.pyplot as plt 
import numpy as np 

z = np.linspace(-10, 10, 100) 
def sigmoid(z):
    return 1/(1 + np.exp(-z))

a = sigmoid(z)
plt.plot(z, a) 
plt.xlabel("z") 
plt.ylabel("sigmoid(z)")
g6ll5ycj

g6ll5ycj2#

虽然实现Sigmoid函数非常简单,但有时传递到函数中的参数可能会导致错误。
代码片段

def sigmoid_function(z):
""" this function implements the sigmoid function, and 
expects a numpy array as argument """

    if isinstance(z, numpy.ndarray):
        continue

    sigmoid = 1.0/(1.0 + np.exp(-z))
    return sigmoid

以下是要紧记的几点要点:

  • 使用Sigmoid值为1.0将产生浮点型输出
  • 在对参数执行计算之前检查参数类型是一种很好的编程实践。它可以帮助避免以后的混乱
Why is sigmoid function used so often?

Sigmoid函数用于将值范围压缩到范围(0,1)。有许多其他函数可以做到这一点,但提高它的受欢迎程度的一个非常重要的点是,它可以简单地表示其导数,这在反向传播中很方便
Sigmoid导数的实现

def sigmoid_derivative(z):
    """ this function implements the derivative of a sigmoid function """

    return sigmoid_function(z) * (1.0 - sigmoid_function(z))

Sigmoid的导数可以用Sigmoid表示!!

plicqrtu

plicqrtu3#

您之所以看到这个错误,很可能是因为您的Z类型为numpy.ndarray,但它包含一个元组。例如,考虑Z的定义。

Z = np.array([1, (1, 2, 3), 3])

如果在Z上运行sigmoid函数,它将输出Znumpy.ndarray,但会生成您得到的TypeError,因为Numpy在Z的所有成员之间广播一元求反,其中一个是元组,而元组不实现一元求反。

相关问题