인공지능/공부

FCN quiz

이게될까 2023. 11. 16. 15:09
728x90
728x90
import torch
import torch.nn as nn
import torch.nn.functional as f
import torch.optim as optim
from torch.utils.data import TensorDataset
from torch.utils.data import DataLoader
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from google.colab import drive
drive.mount('/content/drive')
data = pd.read_csv("/content/drive/MyDrive/Colab Notebooks/health.csv")
h = torch.FloatTensor(np.array(data[["H"]]))
w = torch.FloatTensor(np.array(data[["W"]]))
t = torch.FloatTensor(np.array(data[["T"]]))
lr = 0.0005
epochs = 50000
bathsize = 5
dataset=TensorDataset(w,t)
dataloader = DataLoader(dataset, batch_size= bathsize,shuffle=True)
layer1 = nn.Linear(1,1,bias =False)
layer2 = nn.Linear(1,3,bias =False)
layer3 = nn.Linear(3,2,bias =True)
layer4 = nn.Linear(2,1,bias =True)
nn.init.ones_(layer1.weight)
nn.init.ones_(layer2.weight)
nn.init.ones_(layer3.bias)
nn.init.ones_(layer3.weight)
nn.init.ones_(layer4.bias)
nn.init.ones_(layer4.weight)
model=nn.Sequential(layer1,
                    nn.BatchNorm1d(1), #레이어가 이어지는 숫자만큼
                    nn.ReLU(),
                    layer2,
                    nn.BatchNorm1d(3), #레이어가 이어지는 숫자만큼
                    nn.ReLU(),
                    layer3,
                    nn.BatchNorm1d(2), #레이어가 이어지는 숫자만큼
                    nn.Sigmoid(),                    
                    layer4,
                    nn.Sigmoid()                    
)
optimizer = optim.Adam(model.parameters(),lr=lr,betas=(0.95,0.999))
loss_graph=[]
flag = 0
for k in range (0,epochs+1):
  if flag == 1:
    break
  for i ,sample in enumerate(dataloader) :
    (x,y) = sample
    optimizer.zero_grad()
    cost = f.binary_cross_entropy(model(x),y)
    cost.backward()
    optimizer.step()
    if cost.item() <= 0.01 :
      print(k, i, cost.item())
      loss_graph.append(cost.item())
      flag = 1
      break
    if k % (epochs / 10) == 0:
      print(k, i, cost.item())
      loss_graph.append(cost.item())

0 0 1.4760650396347046 0 1 1.1453548669815063 5000 0 0.15720391273498535 5000 1 0.12777379155158997 10000 0 0.03119075298309326 10000 1 0.03804917633533478 15000 0 0.018264954909682274 15000 1 0.020695755258202553 20000 0 0.014938066713511944 20000 1 0.017047148197889328 24223 0 0.00995264295488596

plt.figure()
plt.plot(loss_graph)
plt.xlabel('Number of iterations')
plt.ylabel('loss_graph')

 

인공지능 과목에서 퀴즈를 봤다.

퀴즈 내용은 1- 1- 3-2-1 노드로 되어있는 classification문제이다.

각 과정에는 정규화와 relu, 정규화와 relu, 정규화와 sigmoid, sigmoid 였고 각각 노드의 weight와 bias는 1로 초기화 하기 였다. 

loss가 0.1이하가 되면 끝내는 것이었는데 도저히 옵티마이져나 코스트 펑션에선 못찾겠어서 일단 if문으로 끝냈다.

728x90

'인공지능 > 공부' 카테고리의 다른 글

AI 챌린지 본선  (25) 2023.11.24
AI 챌린지 예선  (1) 2023.11.24
FCN - tensorflow  (0) 2023.11.15
1 vs all classification  (0) 2023.11.15
Logistic regression + regularized  (1) 2023.11.14