1. 필요한 모듈 임포트

 

- torch.nn nearal network -> 파이토치 인공신경망임

import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.init as init
from torch.autograd import Variable

 

2. Generate Data

 

num_data = 1000  # 데이터 갯수
num_epoch = 1000 # 훈련횟수

noise = init.normal(torch.FloatTensor(num_data, 1), std = 1) # 1000행의 1열 FloatTensor, 표준편차 =1
x = init.uniform(torch.Tensor(num_data, 1), -10, 10)

# y = wx + b => y = 2x + 3
y = 2 * x + 3
y_noise = 2 * x + 3 + noise

<result>

(torch.Size([1000, 1]), torch.Size([1000, 1]))

 

3. Model & Optimizer

# 단순 선형 회귀 생성 및 초기화
# input_dim=1, ouptput_dim =1
model = nn.Linear(1, 1)
output = model(Variable(x))

loss_func = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# lr (Learning Rate) : 미분값을 얼마만큼 이동시킬 것인지를 결정
# 최적화 알고리즘 : loss 를 줄이는 알고리즘
# SGD : loss 의 미분을 이용해서 loss 의 최소값을 찾는 알고리즘에 해당

 

4. Training

loss_arr = []
label = Variable(y_noise)
for i in range(num_epoch):
  optimizer.zero_grad()
  output = model(Variable(x))

  loss = loss_func(output, label)
  optimizer.step()

  if i % 10 ==0:
    print(loss)

  loss_arr.append(loss.data.numpy())

중간에 print(loss)로 loss값 눈으로 확인해보기

 

5. visdom

 

원래 visdom 홈페이지에 회원가입하고 로그인한 상태로 해야하나 

로그인하지않고 하기위해 로컬터널로 진행

# visdom 임포트
!pip3 install visdom
import visdom
from visdom import Visdom
#!npm install -g npm to update!
! npm install -g localtunnel
get_ipython().system_raw('/usr/local/bin/python -m pip install visdom')
get_ipython().system_raw('/usr/local/bin/python -m visdom.server -port 6006 >> visdomlog.txt 2>&1 &')
get_ipython().system_raw('lt --port 6006 >> url.txt 2>&1 &')
import time

time.sleep(5)
! cat url.txt

import visdom
time.sleep(5)
vis = visdom.Visdom(port='6006')
print(vis)
time.sleep(3)
vis.text('testing')
! cat visdomlog.txt

<result>

your url is: https://every-yaks-push.loca.lt
WARNING:visdom:Setting up a new session...
<visdom.Visdom object at 0x7c67cf573970>
INFO:root:Application Started
INFO:root:Working directory: /root/.visdom
INFO:tornado.access:200 POST /env/main (127.0.0.1) 1.07ms
INFO:tornado.access:101 GET /vis_socket (127.0.0.1) 0.62ms
INFO:root:Opened visdom socket from ip: 127.0.0.1
INFO:tornado.access:200 POST /events (127.0.0.1) 0.69ms

위 url로 들어감

비밀번호는

import urllib
print("Password/Enpoint IP for localtunnel is:",urllib.request.urlopen('https://ipv4.icanhazip.com').read().decode('utf8').strip("\n"))

실행하면 

Password/Enpoint IP for localtunnel is: **.***.**** 나옴

이거를 복사해서 비밀번호창에 입력

성공!

 

복사했습니다!