多层网络构建笔记

多层网络构建笔记,第1张

0=w1x1 + w2x2 + b 可以模拟空间中任意一条直线,然后用这条直线来进行分类

这条直线可以写成0=wX,对于一个任意的x,如果wX 大于 零,则直线是上移的状态,x属于直线上方的一类,如果wX 小于零,则x属于直线下方的一类。

import  torch

X = torch.tensor([[1, 0, 0], [1, 1, 0], [1, 0, 1], [1, 1, 1]], dtype=torch.float32)

def logitic(X):

    torch.random.manual_seed(220)
    dense = torch.nn.Linear(3,1)

    zhat  = torch.sigmoid(dense(X))

    print(zhat)
    y = torch.tensor([int(i) for i in zhat >= 0.5],dtype=torch.float32)

    return y

def orget(X):
    w = torch.tensor([-0.08, 0.15, 0.15], dtype=torch.float32)
    zhat = torch.mv(X, w)

    or_get = [int(i) for i in zhat >= 0]
    return or_get

def nanand(X):
    w = torch.tensor([0.23,-0.15,-0.15],dtype=torch.float32)
    zhat = torch.mv(X,w)
    nan_get = [int(i) for i in zhat >= 0]
    return nan_get
def andget(X):
    w = torch.tensor([-0.2,0.15,0.15],dtype=torch.float32)
    zhat = torch.mv(X,w)

    and_get = [int(i) for i in zhat >= 0]
    return and_get
def XOR(X):
    x0 = torch.tensor([1,1,1,1],dtype=torch.float32)
    zhat_or = torch.tensor(orget(X),dtype=torch.float32)

    zhat_naand = torch.tensor(nanand(X),dtype=torch.float32)

    X_new = torch.cat((x0.view(4,1),zhat_or.view(4,1),zhat_naand.view(4,1)),dim=1)


    # print(zhat_naand)
    # print(zhat_or)
    # print(X_new)
    return andget(X_new)


if __name__ == '__main__':
    # print(andget(X))
    # print(logitic(X))
    # print(orget(X))
    # print(nanand(X))
    print(XOR(X))

除了输出层,没一层每个神经元都带有一个函数(上面的就是先加和,再阶越(激活函数hz,在输出层上是gz ),输入层,有常量称为常量神经元,有特征的称为特征神经元。

对于这些层中,最重要的是层中的激活函数,如果将代码中隐藏层的激活函数去掉,也就是激活函数变成hendengbianhuan,这时直接传入输出层,则输出层激活函数最终得到了一个线性方程,还是无法解决非线性问题。所以,当一个问题当前激活函数解决不了时,可以换其它的激活函数来达到效果。h(z)影响模型效果,g(z)影响输出形式(回归,二分类,多分类。。。)

多层神经网络需要对特征矩阵先转置,w在前进行计算

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/942693.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-18
下一篇 2022-05-18

发表评论

登录后才能评论

评论列表(0条)

保存