• classification.py


    # -*- coding: utf-8 -*-
    """
    View more, visit my tutorial page: https://morvanzhou.github.io/tutorials/
    My Youtube Channel: https://www.youtube.com/user/MorvanZhou
    Dependencies:
    torch: 0.4
    matplotlib
    """

    import torch
    import torch.nn.functional as F
    import matplotlib.pyplot as plt

    # torch.manual_seed(1) # reproducible

    # make fake data
    n_data = torch.ones(100, 2)
    #正太分布均值和标准差
    x0 = torch.normal(2*n_data, 1) # class0 x data (tensor), shape=(100, 2)
    y0 = torch.zeros(100) # class0 y data (tensor), shape=(100, 1)
    #正太分布均值和标准差
    x1 = torch.normal(-2*n_data, 1) # class1 x data (tensor), shape=(100, 2)
    y1 = torch.ones(100) # class1 y data (tensor), shape=(100, 1)
    x = torch.cat((x0, x1), 0).type(torch.FloatTensor) # shape (200, 2) FloatTensor = 32-bit floating
    y = torch.cat((y0, y1), ).type(torch.LongTensor) # shape (200,) LongTensor = 64-bit integer

    # The code below is deprecated in Pytorch 0.4. Now, autograd directly supports tensors
    # x, y = Variable(x), Variable(y)

    # plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=y.data.numpy(), s=100, lw=0, cmap='RdYlGn')
    # plt.show()

    #第一种方法
    class Net(torch.nn.Module):
    def __init__(self, n_feature, n_hidden, n_output):
    super(Net, self).__init__()
    self.hidden = torch.nn.Linear(n_feature, n_hidden) # hidden layer
    self.out = torch.nn.Linear(n_hidden, n_output) # output layer

    def forward(self, x):
    x = F.relu(self.hidden(x)) # activation function for hidden layer
    x = self.out(x)
    return x

    net = Net(n_feature=2, n_hidden=10, n_output=2) # define the network
    print(net) # net architecture



    #第二种方法
    net=torch.nn.Sequential(
    torch.nn.Linear(2,10),
    torch.nn.ReLU(),
    torch.nn.Linear(10,2)
    )
    print(net)


    optimizer = torch.optim.SGD(net.parameters(), lr=0.02)
    loss_func = torch.nn.CrossEntropyLoss() # the target label is NOT an one-hotted

    plt.ion() # something about plotting

    for t in range(100):
    out = net(x) # input x and predict based on x
    loss = loss_func(out, y) # must be (1. nn output, 2. target), the target label is NOT one-hotted

    optimizer.zero_grad() # clear gradients for next train
    loss.backward() # backpropagation, compute gradients
    optimizer.step() # apply gradients

    if t % 2 == 0:
    # plot and show learning process
    plt.cla()
    prediction = torch.max(out, 1)[1]
    pred_y = prediction.data.numpy()
    target_y = y.data.numpy()
    plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=pred_y, s=100, lw=0, cmap='RdYlGn')
    accuracy = float((pred_y == target_y).astype(int).sum()) / float(target_y.size)
    plt.text(1.5, -4, 'Accuracy=%.2f' % accuracy, fontdict={'size': 20, 'color': 'red'})
    plt.pause(0.1)

    plt.ioff()
    plt.show()
  • 相关阅读:
    truncate table
    SSIS学习笔记
    Bing Developer Assistant开发随记
    数组中的逆序对
    第一个只出现一次的字符
    丑数
    把数组排成最小的数
    连续子数组的最大和
    最小的k个数
    数组中出现次数超过一半的数字
  • 原文地址:https://www.cnblogs.com/shuimuqingyang/p/10287951.html
Copyright © 2020-2023  润新知