• 神经网络与深度学习(邱锡鹏)编程练习4 FNN 正向传播 pytorch


    NN模型:

    ref:【人工智能导论:模型与算法】MOOC 8.3 误差后向传播(BP) 例题 【第三版】 - HBU_DAVID - 博客园 (cnblogs.com)

    实验目标:

    理解正向传播过程,熟悉pytorch编程。

    初始值:

    w1, w2, w3, w4, w5, w6, w7, w8 = 0.2, -0.4, 0.5, 0.6, 0.1, -0.5, -0.3, 0.8

    x1, x2 = 0.5, 0.3

    y1, y2 = 0.23, -0.07

    输出:

     

    源代码1

    import torch.nn as nn
    import torch
    
    
    def forward_propagate(x, w1, w2):  # 正向传播
        h = nn.Linear(2, 2)  # 输入层,线性(liner)关系
        h.weight.data = w1
        h.bias.data = torch.Tensor([0.0])
        h_out = torch.sigmoid(h(x))
    
        o = nn.Linear(2, 2)  # 输入层,线性(liner)关系
        o.weight.data = w2
        o.bias.data = torch.Tensor([0.0])
        o_out = torch.sigmoid(o(h_out))
    
        return o_out
    
    
    if __name__ == "__main__":
        w1 = torch.Tensor([[0.2, 0.5], [-0.4, 0.6]])
        w2 = torch.Tensor([[0.1, -0.3], [-0.5, 0.8]])
    
        x = torch.tensor([0.5, 0.3])  # 输入值
        y = torch.tensor([0.23, 0.07])  #
        print("输入值:x1, x2;", x, "\n输出值:y1, y2:", y)
    
        out_o = forward_propagate(x, w1, w2)
        print("输入值:x1, x2;", x, "\n输出值:y1, y2:", out_o)

    源代码2:

    整理为 class Net(nn.Module)形式,为将来学习“训练模型”代码做准备
    import torch
    import torch.nn as nn
    
    
    class Net(nn.Module):
        # 初始化网络结构
        def __init__(self, input_size, hidden_size, num_classes):
            super(Net, self).__init__()
            print(input_size, hidden_size, num_classes)
            self.fc1 = nn.Linear(input_size, hidden_size)  # 输入层,线性(liner)关系
            self.sigmoid = torch.nn.Sigmoid()  # 隐藏层,使用ReLU函数
            self.fc2 = nn.Linear(hidden_size, num_classes)  # 输出层,线性(liner)关系
    
        # forword 参数传递函数,网络中数据的流动
        def forward(self, x, w1, w2):
            # print("x:",x)
            self.fc1.weight.data = w1
            self.fc1.bias.data = torch.Tensor([0.0])
            out = self.fc1(x)
            print("h_in:", out)
            # print(self.fc1.weight.data)
            out = self.sigmoid(out)
            print("h_out:", out)
            self.fc2.weight.data = w2
            self.fc2.bias.data = torch.Tensor([0.0])
            out = self.fc2(out)
            print("o_in:", out)
            # print(self.fc2.weight.data)
            out = self.sigmoid(out)
            # print("o_out:", out)
            return out
    
    
    net = Net(2, 2, 2)
    
    if __name__ == "__main__":
        x = torch.tensor([0.5, 0.3])
        y = torch.tensor([0.23, -0.07])  # y0, y1 = 0.23, -0.07
        w1 = torch.Tensor([[0.2, 0.5], [-0.4, 0.6]])    # 一般情况下,参数无需初始化,让机器自己学习。 有时,初始化参数可提高效率。
        w2 = torch.Tensor([[0.1, -0.3], [-0.5, 0.8]])
        print("输入值:x1, x2;", x, "\n输出值:y1, y2:", y)
    
        out_o = net(x, w1, w2)
        print("输入值:x1, x2;", x, "\n输出值:y1, y2:", out_o)
     
  • 相关阅读:
    cf 1452E. Two Editorials(中点排序)
    cf 888G
    cf 1447E. Xor Tree(二进制分治)
    2020ICPC·小米 网络选拔赛第一场 E-Phone Network (线段树)
    cf 1447D. Catching Cheaters ( 最大子段和思想 dp )
    POJ
    cf 1437F.Emotional Fishermen(计数dp)
    霍夫丁不等式
    切比雪夫不等式
    霍夫丁不等式引理证明
  • 原文地址:https://www.cnblogs.com/hbuwyg/p/16343717.html
Copyright © 2020-2023  润新知