Part2-11 Evaluating & Predicting
expert보다 keras로 할수 있는게 많기 때문에 기본으로 진행
history
모델링한 로그가 epoch당 기록됨 (loss, acccuracy)
hist.history
>>> {'loss': [0.21890185427119335], 'accuracy': [0.92983335]}
Evaluating
학습한 모델을 확인 test_set으로 값을 확인
model.evaluate(test_x, test_y, batch_size=batch_size)
>>> [0.040028760529810095, 0.9857]
Prediction
가장 높은 자극을 받은 노드가 정답임. 가장 높은 값은 np.argmax를 활용하면 간편함
평가는 우리가 직접하는 것이기에 레이블이 필요없음
확인해볼 y값

test_image = test_x[0, :, :, 0]
test_image.shape
pred = model.predict(test_image.reshape(1, 28, 28, 1))
pred.shape
>>> (1, 10)
pred #우리가 원하는 형태로 나오지 않음
>>> array([[2.0396669e-09, 2.5598872e-09, 1.4872910e-07, 5.5574571e-08,
2.9990253e-11, 3.0660738e-10, 2.1636267e-14, 9.9999964e-01,
1.1250626e-09, 7.2331815e-08]], dtype=float32)
np.argmax(pred) #가장 높은 자극을 받는 노드 검출
>>> 7
test batch
1개의 이미지가 아닌 여러장(32개)의 이미지를 한번에 예측
test_batch = test_x[:32]
test_batch.shape
>>> (32, 28, 28, 1)
preds = model.predict(test_batch)
preds.shape
>>> (32, 10)
np.argmax(preds, -1) #각 row별로 최대노드를 찾아야하기 때문에 -1(row축)연산
>>> array([7, 2, 1, 0, 4, 1, 4, 9, 5, 9, 0, 6, 9, 0, 1, 5, 9, 7, 3, 4, 9, 6,
6, 5, 4, 0, 7, 4, 0, 1, 3, 1], dtype=int64)
Part2-12 Pytorch 기초
numpy와 굉장히 유사함
기초 매서드
arange, tpye, reshape, rand, zeros, ones 등 동일한 방법으로 사용가능
#arange
np.arange(9)
>>> array([0, 1, 2, 3, 4, 5, 6, 7, 8])
nums = torch.arange(9)
nums
>>> tensor([0, 1, 2, 3, 4, 5, 6, 7, 8])
nums.shape
>>> torch.Size([9])
type(nums)
>>> torch.Tensor
nums.numpy() #numpy로 변환
>>> array([0, 1, 2, 3, 4, 5, 6, 7, 8], dtype=int64)
nums.reshape(3,3)
>>> tensor([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
torch.rand(3,3)
>>> tensor([[0.2963, 0.9822, 0.5231],
[0.9371, 0.9171, 0.9328],
[0.9409, 0.9289, 0.6541]])
torch.zeros((3,3))
>>> tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
ones = torch.ones((3,3))
ones
>>> tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
torch.zeros_like(ones)
>>> tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
zeros.size()
>>> torch.Size([3, 3])

수학연산
nums *3 #브로드캐스팅 가능
>>> tensor([ 0, 3, 6, 9, 12, 15, 18, 21, 24])
nums= nums.reshape((3,3))
nums + nums
>>> tensor([[ 0, 2, 4],
[ 6, 8, 10],
[12, 14, 16]])
result = torch.add(nums, 10)
result.numpy()
>>> array([[10, 11, 12],
[13, 14, 15],
[16, 17, 18]], dtype=int64)

view
reshape과는 큰 차이가 없고 view보다 reshape 사용을 권장하고 있음
하지만 공식홈페이지에서 모델링에서 view를 사용하기 때문에 알아둘 필요가 있음
range_nums = torch.arange(9).reshape((3,3))
range_nums
>>> tensor([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
range_nums.view(-1)
>>> tensor([0, 1, 2, 3, 4, 5, 6, 7, 8])
range_nums.view(1,9)
>>> tensor([[0, 1, 2, 3, 4, 5, 6, 7, 8]])
슬라이싱과 인덱싱
numpy에서 하던 방법과 큰 차이 없음
정말로 큰차이가 없어서 사진으로 대체

numpy와 다른부분
type변경방법, 및 device 선택방법
arr = np.array([1,1,1])
arr_torch = torch.from_numpy(arr)
arr_torch.float()
>>> tensor([1., 1., 1.])
# device 선택을 할 수있는 아래는 공식홈페이지에서 gpu가 있으면 gpu 아니면 cpu로하게금 하는 공식
# default로 쓰면 된다
device = 'cuda' if torch.cuda.is_available() else 'cpu'
arr_torch.to(device) #확인이 바로 되진 않지만 변경됨
AutoGrad
텐서연산에 대해서 자동으로 미분값을 구해주는 기능을 함.
텐서자료를 생성할때 requires_grad인수를 True로 지정하면 텐서에 실행되는 모든 연산에 미분값을 계산함
x = torch.ones(2,2,requires_grad = True)
y = x + 2
z = y * y * 3
out = z.mean()
out.backward() #backward 함수를 실행하면 requires_grad가 True 변수의 미분값을 자동으로 갱신
x.grad #미분값의 속성을 확인
>>> tensor([[4.5000, 4.5000],
[4.5000, 4.5000]])
#test모드를 사용할때는 속도를 향상시키기 위해 기울기,배치노말라이제이션, 드롭아웃을 안하게 해서 속도를 높임
with torch.no_grad():
print((x ** 2).requires_grad)
후기...
토치 짱신기함. 사람들이 편하다고 이야기하는 이유를 이해했음
Autograd... 설명이 다소 부족하다 느낌...
'책&강의 학습 > 올인원 패키지 :딥러닝&인공지능' 카테고리의 다른 글
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 8회차 미션 (0) | 2020.07.06 |
|---|---|
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 7회차 미션 (0) | 2020.07.05 |
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 5회차 미션 (0) | 2020.07.03 |
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 4회차 미션 (0) | 2020.07.02 |
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 3회차 미션 (0) | 2020.07.01 |
댓글