import torch
x_train = torch.FloatTensor([[1,1], [2,2], [3,3],[4,4],[5,3],[6,2]]) # 파이토치 trin 선언 방식
y_train = torch.FloatTensor([[0], [0], [0],[1],[1],[1]])
w = torch.randn([2,1], requires_grad=True) # 행렬 곱셈을 위한 W, B 생성 방식
b = torch.randn([1], requires_grad=True)
optimizer = torch.optim.SGD([w, b], lr=0.01) # 모델의 옵티마이져를 지정.
# 딥러링 1단계 모델을 만든다 Model Setup
def H(x):
model = torch.sigmoid(torch.matmul(x,w) + b) # 모델을 선언 후 이진분류의 torch.sigmoid 사용, 행열을 곱하기 위한 방식.
return model
# 딥러링 2단계 모델을 학습시킨다. Training
for iter in range(2000):
cost = torch.mean((-1)*y_train*torch.log(H(x_train))+(-1)*(1-y_train)*torch.log(1-H(x_train))) # 이진분류식 눈에 익혀야 됨. W,B 값을 모두 구하기 위해.
optimizer.zero_grad() # 0으로 가기위해 / 편미분을 위해 세 문장은 같이 다님
cost.backward() # w, b 값을 업데이트 한다.
optimizer.step()
if iter % 100 == 0:
print(iter, cost.detach().item())
# 딥러링 3단계 추론을 수행한다. Inference
x_test = torch.FloatTensor([[7,1]]) # 새로운 상수값(y_train)인 x_test의 값에 W, B으로 값을 구함
model_result = H(x_test)
print(model_result)
print(model_result.detach())
print(model_result.detach().item())
if(model_result.detach().item() < 0.5):
print("F")
else:
print("A+")
0 2.880511522293091
100 0.9107264876365662
200 0.6571314930915833
300 0.6095400452613831
400 0.5719518065452576
500 0.5412195324897766
600 0.515383780002594
700 0.4931775629520416
800 0.4737534523010254
900 0.45652517676353455
1000 0.4410734176635742
1100 0.42708930373191833
1200 0.414339154958725
1300 0.4026416838169098
1400 0.3918534815311432
1500 0.38185882568359375
1600 0.37256303429603577
1700 0.3638875484466553
1800 0.35576581954956055
1900 0.34814175963401794
tensor([[0.9985]], grad_fn=<SigmoidBackward0>)
tensor([[0.9985]])
0.9984923601150513
A+