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)
    
  • 相关阅读:
    jmeter接口测试3-正则表达式提取器的使用
    Sublime中Markdown的安装与使用
    python使用you-get模块下载视频
    python BeautifulSoup模块的简要介绍
    python Requests模块的简要介绍
    mongodb基本操作的学习
    python中的常用方法
    网盘的选择,百度网盘、google drive 还是 Dropbox
    python_爬虫一之爬取糗事百科上的段子
    pycharm的使用破解和Anaconda的使用
  • 原文地址:https://www.cnblogs.com/lky520hs/p/10864952.html
Copyright © 2011-2022 走看看