《深度学习入门2:自制框架》step 43 sigmod部分代码调整

2023-12-30 03:41:40

作者书中给出的sigmod代码是如下部分:

def sigmoid_simple(x):
	x = as_avriable(x)
	y = 1 / (1 + exp(-x))
	return y

在从图灵社区上下载的代码包里,我们可以看到完整的sigmod类及方法的代码,如下:

class Sigmoid(Function):
    def forward(self, x):
        xp = cuda.get_array_module(x)
        # y = 1 / (1 + xp.exp(-x))
        y = xp.tanh(x * 0.5) * 0.5 + 0.5  # Better implementation
        return y

    def backward(self, gy):
        y = self.outputs[0]()
        gx = gy * y * (1 - y)
        return gx


def sigmoid(x):
    return Sigmoid()(x)

如果按照上述代码执行step 43里的神经网络案例,由于之前我们对于输入值的格式要求必须是np.ndarray的实例:

    def __init__(self, data, name=None):  # 初始化数据方法,先给name变量初始为None
        if data is not None:  # 规范数据输入格式,即必须为np.array格式。
            if not isinstance(data, np.ndarray):  # 判断数据是否是ndarray的实例,如果不是,则报错
                raise TypeError('{} is not supported'.format(type(data)))

所以会报出错误:

raise TypeError('{} is not supported'.format(type(data)))
TypeError: <class 'xxx.core.Variable'> is not supported

所以,我们要对作者给出的代码进行调整:

def sigmoid_simple(x):
	#x = as_avriable(x)  把这一句标注掉
	y = 1 / (1 + np.exp(-x)) # 选用numpy的exp方法
	return y

再次运行神经网络的训练代码,得到正确结果:

variable(0.8473695850105871)
variable(0.2514286285183606)
variable(0.2475948546674987)
variable(0.23786120447054812)
variable(0.21222231333102917)
variable(0.1674218111783416)
variable(0.0968193261999267)
variable(0.07849528290602333)
variable(0.07749729552991154)
variable(0.07722132399559317)

文章来源:https://blog.csdn.net/u014370124/article/details/135299849
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。