美文网首页
第二次作业

第二次作业

作者: 邯山之郸 | 来源:发表于2021-03-17 07:41 被阅读0次

    问题:试设计一个前馈神经网络来解决XOR问题,要求该前馈神经网络具有两个隐藏层神经元和一个输出神经元,并使用ReLU作为激活函数。

    解答:神经网络如下图。

    image.png image.png

    其中激活函数 ReLU,令


    image.png image.png image.png

    即可解决XOR问题。

    代码实现:

    import torch
    import torch.nn.functional as F
    import os
    import numpy as np
    os.chdir(r"C:\Users\Eddie\Desktop")
    
    
    # 1. prepare dataset
    x_data = torch.tensor([[0,1.0],[1.0,1.0],[0,0],[1.0,0]])
    
    y_data = torch.tensor([[1.0],[0],[1.0],[0]])
    
    
    # 2. Design model
    class LogisticRegressionModel(torch.nn.Module):
        def __init__(self):
            super(LogisticRegressionModel, self).__init__()
            self.linear1 = torch.nn.Linear(2,2,bias = True)
            self.linear2 = torch.nn.Linear(2,1,bias = True)
        def forward(self, x):
            y_pred = torch.relu(self.linear1(x))
            y_pred = self.linear2(y_pred)
            return y_pred
    model = LogisticRegressionModel()
    model.load_state_dict(torch.load(r"models\net1.pth")) # load weights and bias data
    
    # 3. Construct loss and optimizer
    criterion = torch.nn.MSELoss(reduction='mean')
    optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
    #-------------------------------------------------------#
    # 4. Training cycle
    for epoch in range(1000):
        y_pred = model(x_data)
        loss = criterion(y_pred, y_data)
        print(epoch, loss.item())
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    # 5. 保存权重数据
    torch.save(obj=model.state_dict(), f=r"models\net1.pth")
    
    # 6. 输出结果
    print(y_pred)
    print(y_data)
    
    print("权重1:",model.state_dict()['linear1.weight'])
    print("偏置1:",model.state_dict()['linear1.bias'])
    print("权重2:",model.state_dict()['linear2.weight'])
    print("偏置2:",model.state_dict()['linear2.bias'])
    
    
    
    

    相关文章

      网友评论

          本文标题:第二次作业

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