GithubHelp home page GithubHelp logo

basicpytorch's Introduction

BasicPytorch

import random
import pandas as pd
import numpy as np

import torch
import torch.nn as nn
import torch.nn.functional as F
import matplotlib.pyplot as plt
from torch.autograd import Variable
from torch.utils.data import DataLoader,TensorDataset

from sklearn.model_selection import train_test_split

import os
os.environ['KMP_DUPLICATE_LIB_OK']= 'True'

class Net_1(nn.Module):
    def __init__(self, n_intput, neural_num, d_prob=0.5):
        super(Net_1, self).__init__()
        self.linears = nn.Sequential(
            nn.Linear(n_intput, neural_num),
            nn.ReLU(inplace=True),

            nn.Dropout(0.5),
            nn.Linear(neural_num, neural_num),
            nn.ReLU(inplace=True),

            nn.Dropout(0.5),
            nn.Linear(neural_num, neural_num),
            nn.ReLU(inplace=True),

            nn.Dropout(0.5),
            nn.Linear(neural_num, 1),
        )

    def forward(self, x):
        return self.linears(x)
    
    
class Net_2(nn.Module):
    def __init__(self, n_intput, neural_num, d_prob=0.5):
        super(Net_2, self).__init__()
        self.linears = nn.Sequential(
            nn.Linear(n_intput, neural_num),
            nn.ReLU(inplace=False),

            nn.Dropout(0.5),
            nn.Linear(neural_num, neural_num),
            nn.ReLU(inplace=False),

            nn.Dropout(0.5),
            nn.Linear(neural_num, neural_num),
            nn.ReLU(inplace=False),

            nn.Dropout(0.5),
            nn.Linear(neural_num, 1),
        )

    def forward(self, x):
        return self.linears(x)        
    
    
class Net_3(nn.Module):
    def __init__(self,n_input,n_hidden,n_output):
        super(Net_3,self).__init__()
        self.hidden1 = nn.Linear(n_input,n_hidden)
        self.hidden2 = nn.Linear(n_hidden,n_hidden)
        self.predict = nn.Linear(n_hidden,n_output)
        self.dropout = nn.Dropout(0.5)
        
    def forward(self,input):
        out = self.hidden1(input)
        out = F.relu(out, inplace=False)
        
        out = self.dropout(out)
        out = self.hidden2(out)
        out = F.relu(out, inplace=False)

        out = self.dropout(out)
        out = self.hidden2(out)
        out = F.relu(out, inplace=False)

        out = self.dropout(out)
        out =self.predict(out)

        return out
    
    
class Net_4(nn.Module):
    def __init__(self,n_input,n_hidden,n_output):
        super(Net_4,self).__init__()
        self.hidden1 = nn.Linear(n_input,n_hidden)
        self.hidden2 = nn.Linear(n_hidden,n_hidden)
        self.predict = nn.Linear(n_hidden,n_output)
        self.dropout = nn.Dropout(0.5)
        
    def forward(self,input):
        out = self.hidden1(input)
        out = F.relu(out, inplace=True)
        
        out = self.dropout(out)
        out = self.hidden2(out)
        out = F.relu(out, inplace=True)

        out = self.dropout(out)
        out = self.hidden2(out)
        out = F.relu(out, inplace=True)

        out = self.dropout(out)
        out =self.predict(out)

        return out


dfx = pd.DataFrame()
dfy = pd.DataFrame()

dfx['x'] = pd.Series(np.random.rand(1000)).astype(np.float32)
dfx['y'] = pd.Series(np.random.uniform(40,80,1000)).astype(np.float32)

dfy['z'] = dfx.apply(lambda x: pow(x['x'],2) + 3*x['y'] + random.random(), axis=1).astype(np.float32)

dfx = torch.tensor(dfx.astype(np.float32).values)
dfy = torch.tensor(dfy.astype(np.float32).values)

x_train, x_test, y_train, y_test = train_test_split(dfx, dfy, test_size = 0.15)

if len(y_train.shape) == 1:
    y_train = y_train.reshape(y_train.shape[0],1)
    
if len(y_test.shape) == 1:
    y_test = y_test.reshape(y_test.shape[0],1)    
    
train_set = TensorDataset(x_train, y_train)
test_set = TensorDataset(x_test, y_test)
#定义迭代器
train_data = DataLoader(dataset = train_set, batch_size = 64, shuffle=True)
test_data  = DataLoader(dataset = test_set, batch_size = 64, shuffle=False)    
   

然后开始执行

net1 = Net_1(2,1024,1)
print(net1)

# optimizer = torch.optim.SGD(net.parameters(),lr = 0.0001)
optimizer = torch.optim.Adam(net1.parameters(), lr=0.001)
loss_func = torch.nn.MSELoss()

for t in range(1000):
    #前向传播
    prediction = net1(x_train)
    #记录单批次一次batch的loss
    loss = loss_func(prediction,y_train)
    #反向传播
    optimizer.zero_grad()

    loss.backward()

    optimizer.step()

    if t%100 ==0:
        print('Loss = %.4f' % loss.data)

Net_1( (linears): Sequential( (0): Linear(in_features=2, out_features=1024, bias=True) (1): ReLU(inplace=True) (2): Dropout(p=0.5, inplace=False) (3): Linear(in_features=1024, out_features=1024, bias=True) (4): ReLU(inplace=True) (5): Dropout(p=0.5, inplace=False) (6): Linear(in_features=1024, out_features=1024, bias=True) (7): ReLU(inplace=True) (8): Dropout(p=0.5, inplace=False) (9): Linear(in_features=1024, out_features=1, bias=True) ) ) Loss = 33906.8633 Loss = 334.8231 Loss = 269.7854 Loss = 248.1467 Loss = 290.9594 Loss = 238.1143 Loss = 214.1551 Loss = 216.3815 Loss = 196.5995 Loss = 267.9281

net2 = Net_2(2,1024,1)
print(net2)

# optimizer = torch.optim.SGD(net.parameters(),lr = 0.0001)
optimizer = torch.optim.Adam(net2.parameters(), lr=0.001)
loss_func = torch.nn.MSELoss()

for t in range(1000):
    #前向传播
    prediction = net2(x_train)
    #记录单批次一次batch的loss
    loss = loss_func(prediction,y_train)
    #反向传播
    optimizer.zero_grad()

    loss.backward()

    optimizer.step()

    if t%100 ==0:
        print('Loss = %.4f' % loss.data)

Net_2( (linears): Sequential( (0): Linear(in_features=2, out_features=1024, bias=True) (1): ReLU() (2): Dropout(p=0.5, inplace=False) (3): Linear(in_features=1024, out_features=1024, bias=True) (4): ReLU() (5): Dropout(p=0.5, inplace=False) (6): Linear(in_features=1024, out_features=1024, bias=True) (7): ReLU() (8): Dropout(p=0.5, inplace=False) (9): Linear(in_features=1024, out_features=1, bias=True) ) ) Loss = 35718.5039 Loss = 329.2430 Loss = 270.2094 Loss = 282.4565 Loss = 245.1587 Loss = 220.8517 Loss = 239.9501 Loss = 263.8072 Loss = 210.4690 Loss = 209.2976

net3 = Net_3(2,1024,1)
print(net3)

# optimizer = torch.optim.SGD(net.parameters(),lr = 0.0001)
optimizer = torch.optim.Adam(net3.parameters(), lr=0.001)
loss_func = torch.nn.MSELoss()

for t in range(1000):
    #前向传播
    prediction = net3(x_train)
    #记录单批次一次batch的loss
    loss = loss_func(prediction,y_train)
    #反向传播
    optimizer.zero_grad()

    loss.backward()

    optimizer.step()
        
    if t%100 ==0:
        print('Loss = %.4f' % loss.data)

Net_3( (hidden1): Linear(in_features=2, out_features=1024, bias=True) (hidden2): Linear(in_features=1024, out_features=1024, bias=True) (predict): Linear(in_features=1024, out_features=1, bias=True) (dropout): Dropout(p=0.5, inplace=False) ) Loss = 36181.4453 Loss = 452.1683 Loss = 349.2935 Loss = 287.5428 Loss = 269.7836 Loss = 243.0369 Loss = 308.7162 Loss = 269.6352 Loss = 308.8691 Loss = 277.1499

net4 = Net_4(2,1024,1)
print(net4)

optimizer = torch.optim.Adam(net4.parameters(), lr=0.001)
loss_func = torch.nn.MSELoss()

for t in range(1000):
    #前向传播
    prediction = net4(x_train)
    #记录单批次一次batch的loss
    loss = loss_func(prediction,y_train)
    #反向传播
    optimizer.zero_grad()

    loss.backward()

    optimizer.step()

    if t%100 ==0:
        print('Loss = %.4f' % loss.data)

Net_4( (hidden1): Linear(in_features=2, out_features=1024, bias=True) (hidden2): Linear(in_features=1024, out_features=1024, bias=True) (predict): Linear(in_features=1024, out_features=1, bias=True) (dropout): Dropout(p=0.5, inplace=False) ) Loss = 34595.2148 Loss = 321.6986 Loss = 263.2131 Loss = 265.3299 Loss = 266.4159 Loss = 260.8026 Loss = 243.9910 Loss = 207.9348 Loss = 227.1938 Loss = 231.1912

basicpytorch's People

Contributors

robin-zhaobin avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.