美文网首页大数据,机器学习,人工智能数据结构和算法分析
自己动手制作人工神经网络0x1:初始化部分

自己动手制作人工神经网络0x1:初始化部分

作者: 御史神风 | 来源:发表于2018-08-08 14:44 被阅读2次

    说在前面

    从这里开始,我假定你们已经知道ANN是啥玩意。

    目标

    首先,明确我们的目标。我们将构建一个具有一个隐藏层的ANN。
    所有层之间的关系都是全连接,并且使用sigmoid作为激活函数。
    隐含层 h=sigmoid(i*wih+bih)
    输出层 o=sigmoid(h*who+bho)

    一个输入,隐藏,输出层节点数都为3的网络

    Coding

    P1:初始化

    首先,导入所需的库。我们需要numpy帮助完成矩阵运算。也需要scipy库简化实现激活函数的代码量。

    import numpy as np
    import scipy.special
    

    然后创建一个类,方便操作,类名就叫ANN吧

    class ANN:
        """
        Artificial Neural Networks
        """
        pass
    

    接着给ANN类,我们的神经网络编写初始化函数。
    初始化的参数有输入层节点个数(inputNodes),隐藏层节点个数(hiddenNodes),输出层节点个数(outputNodes),还有学习速率(learningRate)
    在初始化函数里,顺便创建两个矩阵(wio, who)。np.random.normal()会返回一个已经按正态分布初始化的矩阵,第一个参数为分布中心,第二个参数为标准方差,第三个参数是数组大小。
    最后设置激活函数(a_f(x))为scipy.special.expit(x),expit()就是sigmoid函数,他可以使我们节点的输出更丝滑。

        def __init__(self, inputNodes, hiddenNodes, outputNodes, learningRate):
    
            self.iN = inputNodes
            self.hN = hiddenNodes
            self.oN = outputNodes
            self.lr = learningRate
    
            self.wih = np.random.normal(0.0, pow(self.hN, -0.5), (self.hN, self.iN))
            self.who = np.random.normal(0.0, pow(self.oN, -0.5), (self.oN, self.hN))
    
            self.a_f = lambda x: scipy.special.expit(x)
    

    这样,便完成了初始化的部分,为接下来的工作打下基础。

    相关文章

      网友评论

        本文标题:自己动手制作人工神经网络0x1:初始化部分

        本文链接:https://www.haomeiwen.com/subject/mjtxbftx.html