zoukankan      html  css  js  c++  java
  • Pytorch设立计算图并自动计算

    本博文参考七月在线pytorch课程
    1.numpy和pytorch实现梯度下降法

    使用numpy实现简单神经网络

    import numpy as np
    N, D_in, H, D_out = 64, 1000, 100, 10
    
    # 随机创建一些训练数据
    x = np.random.randn(N, D_in)
    y = np.random.randn(N, D_out)
    
    w1 = np.random.randn(D_in, H)
    w2 = np.random.randn(H, D_out)
    
    learning_rate = 1e-6
    for it in range(500):
        # Forward pass
        h = x.dot(w1) # N * H
        h_relu = np.maximum(h, 0) # N * H
        y_pred = h_relu.dot(w2) # N * D_out
        
        # compute loss
        loss = np.square(y_pred - y).sum()
        print(it, loss)
        
        # Backward pass
        # compute the gradient
        grad_y_pred = 2.0 * (y_pred - y)
        grad_w2 = h_relu.T.dot(grad_y_pred)
        grad_h_relu = grad_y_pred.dot(w2.T)
        grad_h = grad_h_relu.copy()
        grad_h[h<0] = 0
        grad_w1 = x.T.dot(grad_h)
        
        # update weights of w1 and w2
        w1 -= learning_rate * grad_w1
        w2 -= learning_rate * grad_w2
    

    使用pytorch实现简单神经网络

    N, D_in, H, D_out = 64, 1000, 100, 10
    
    # 随机创建一些训练数据
    x = torch.randn(N, D_in)
    y = torch.randn(N, D_out)
    
    w1 = torch.randn(D_in, H)
    w2 = torch.randn(H, D_out)
    
    learning_rate = 1e-6
    for it in range(500):
        # Forward pass
        h = x.mm(w1) # N * H
        h_relu = h.clamp(min=0) # N * H
        y_pred = h_relu.mm(w2) # N * D_out
        
        # compute loss
        loss = (y_pred - y).pow(2).sum().item()
        print(it, loss)
        
        # Backward pass
        # compute the gradient
        grad_y_pred = 2.0 * (y_pred - y)
        grad_w2 = h_relu.t().mm(grad_y_pred)
        grad_h_relu = grad_y_pred.mm(w2.t())
        grad_h = grad_h_relu.clone()
        grad_h[h<0] = 0
        grad_w1 = x.t().mm(grad_h)
        
        # update weights of w1 and w2
        w1 -= learning_rate * grad_w1
        w2 -= learning_rate * grad_w2
    

    设定初始值

    #numpy
    x = np.random.randn(N, D_in)
    y = np.random.randn(N, D_out)
    
    w1 = np.random.randn(D_in, H)
    w2 = np.random.randn(H, D_out)
    
    #pytorch
    x = torch.randn(N, D_in)
    y = torch.randn(N, D_out)
    
    w1 = torch.randn(D_in, H)
    w2 = torch.randn(H, D_out)
    
  • 相关阅读:
    R语言初涉
    Android源码大全
    Centos关闭防火墙
    Java开发常用下载的网址
    linux下解压命令大全
    Android常见布局问题
    配置Nutch模拟浏览器以绕过反爬虫限制
    Nutch的发展历程
    用三层交换机当路由器——最复杂的网络拓扑结构
    Ant 简易教程
  • 原文地址:https://www.cnblogs.com/lky520hs/p/10864952.html
Copyright © 2011-2022 走看看