본문 바로가기
728x90

분류 전체보기81

딥러닝은 무엇이며, 머신러닝과의 차이점은? 딥러닝은 깊은 인공신경망을 이용해 대량의 데이터에 대하 복잡한 패턴을 학습하는 것입니다. 딥러닝과 머신러닝의 차이는 깊이와 복잡성에 있습니다. 머신러닝은 딥러닝에 비해 계층구조가 얕고, 비교적 소규모의 데이터에 적합한 학습을 목표로 합니다. 그렇기 때문에 사용자가 데이터의 전처리와 특징추출에 대해서 많이 개입하게 됩니다. 반면에 딥러닝은 대용량의 원시 데이를 기반으로 복잡한 패턴을 모델이 스스로 추출 및 파악하도록 학습하기 때문에 사용자의 개입이 매우 적습니다. 즉, 머신러닝은 의도하는 기계학습만을 사용자가 예측 가능한 수준에서 수행하지만, 딥러닝은 모델이 사용자가 예측하는 것을 넘어서 스스로 매우 복잡한 패턴을 파악하도록 합니다. 2023. 8. 3.
[c++] 백준 텀프로젝트(9466), BFS, 반례추가 문제 https://www.acmicpc.net/problem/9466 팀을 이루지 못하는 학생 수 구하기. 팀을 이루는 조건 1 -> 3 -> 5 -> 1 : 자기 자신으로 돌아와야 함. 1 -> 1 : 혼자 팀 팀을 못 이루는 조건 1 -> 3 -> 5 -> 3 : 1은 팀 x 1 -> 3 -> 5 -> 5 : 1,3은 팀 x 풀이 위의 조건에서와 같이 현재 n에서 탐색을 할 때, 팀을 이루든 이루지 못하든 무조건 순환루프에 걸리게 되어 있습니다. 순환루프에 걸렸을 때, 팀을 이루는 사람과 이루지 못하는 사람을 분리해서 표시를 해주면 됩니다. n번째에서 표시를 마치고, n+1번째에서 탐색을 할 시, 1~n번째에서 표시한 사람을 가르킨다면 이 또한 팀을 이루지 못한다고 할 수 있습니다. 이미 앞에서는 .. 2023. 8. 1.
[Pytorch] Cosin Similarity Loss +역전파 1. Cosin Similarity Loss import torch import torch.nn.functional as F import torch.nn as nn feat1 = torch.tensor([0.1,0.2,0.3], dtype=torch.float32) feat2 = torch.tensor([0.4,0.2,0.5], dtype=torch.float32) loss = F.cosine_similarity(feat1, feat2) # negative cosin loss loss = -F.cosine_similarity(feat1, feat2) # positive cosin loss 두 벡터(feature)를 가깝게 혹은 멀게 만들도록 학습합니다. 저는 여기서 의문점이 들었습니다. 위의 수식의 역전.. 2023. 7. 30.
[Pytorch] Inplace error 해결 inplace error - 텐서의 임의의 값을 변경(대체) 헀을 때 gradient가 끊기면서 발생하는 문제 - ex) a = b 이런식으로 대체할 경우에 발생함. a += 1 이런식의 표현도 에러가 발생할 수 있음. -> a = a + 1, 이렇게 수행해야 한다. a[index] = b 이런식의 표현도 동일. - 해결책은 clone()을 사용해서 텐서를 복사후에 대체를 하고 넘겨주면 된다. - ex) c = a.clone() c[index] = b a = c return a 2023. 7. 29.
[Pytorch] Tensor 다차원 인덱싱 torch tensor를 다루다 보면 3차원 혹은 4차원 이상의 텐서를 다룰 때, 인덱싱의 어려움이 생길 때가 있습니다. 예를 들어, 4차원에서 각 batch마다 다른 channel의 특정 index만 추출하고 싶을 때가 그렇습니다. 아래 코드는 각 배치마다 다른 채널의 값들을 가져오는 예시입니다. import torch a = torch.randn(2,3,2,3) b,c,w,h = a.shape batch_index = list([i] for i in range(b)) # [[0],[1]] channel_index = [[0,0,0],[1,1,1]] # 각 배치마다 가져올 채널 지정 k = a[batch_index, channel_index] # 각 배치에 해당하는 각 채널들을 인덱싱하여 가져옴 a라는.. 2023. 7. 29.
[c++] 백준 벽 부수고 이동하기(2206), BFS 문제 https://www.acmicpc.net/problem/2206 NxM 형태의 맵에서, 0은 이동가능, 1은 벽으로 이동 불가. 상하좌우로만 이동가능. 좌측 상단(1,1)에서 우측하단(N,M)까지 이동 가능한 최단 거리 출력. 이동 불가시 -1 출력. 벽을 1 개만 부실 수 있음. 풀이 일반적으로 최단거리 출력은 방문여부 체크가 중요함. (map과 방문여부 체크하는 map_check를 따로 만듬) 이미 방문한 곳은 최단거리가 아니라고 가정하기 때문. 하지만, 이 문제는 벽을 1개 부실 수 있기 때문에 이미 방문한 곳이라도 벽을 부수고 방문했느냐 혹은 부수지 않고 방문 했느냐로 나뉘게 됩니다. 다시 말해, 방문여부 체크를 벽을 1개 부셨을 때와 부수지 않았을 때를 나누어서 생각해야 합니다. 따라서,.. 2023. 7. 29.
[c++] Tuple 사용법 여러 자료형을 묶어서 사용할 수 있음. #include tuple t(1, 'a', "abcd"); pair는 2쌍까지만 가능하지만, tuple은 여러 쌍 가능. 그렇지만, 같은 자료형을 사용하는 것을 추천. 3쌍 이상 묶어야 할 때 사용. 예를 들어, 큐에 3차원 좌표를 쌓을 때. 1. Tuple 선언 및 초기화 2. Tuple 원소 접근 3. Tuple 원소분해 4. 두 개의 튜플 연결 5. Tuple swap 2023. 7. 28.
[c++] 3차원 배열(백터) 선언 및 초기화 3차원 배열을 선언하는 2가지 방법에 대해서 소개합니다. 1. 기본 배열로 선언 및 초기화 2. vector를 이용한 선언 및 초기화 1. 기본 배열로 선언 및 초기화 fill(arr[i], arr[i] + column, value) : i번째 행마다 column까지의 원소에 value를 할당함 2. vector를 이용한 선언 및 초기화 (M,N,H) 형태의 3차원 벡터 생성함. vector안에 또 다른 벡터를 선언하고 이를 높이(H)만큼 선언 초기값은 0으로 할당되며, 원할시 값을 할당할 수 있음. fill()을 사용해서도 초기화가 가능하다. 함수로 넘길시 vector를 복사할 것인지, 주소만 넘길 것인지 생각해야 함. 벡터의 가장 큰 장점은 공간을 미리 할당하지 않아도 됨. 입력받은 공간 크기만큼 할.. 2023. 7. 27.
[c++] 반복문 iterator처럼 사용하기. 2023. 7. 26.
[c++] 백준 숨바꼭질(1679), BFS, 반례모음 문제 https://www.acmicpc.net/problem/1697 수빈이(N)이 동생(K)를 찾는 가장 빠른 시간 출력 수빈이는 현재 위치(X)에서 3가지 동작(X+1, X-1, 2*X) 가능 5 17 -> 4출력(5-10-9-18-17) 풀이 1차원에서 수빈이의 이동 가능한 모든 방향을 탐색, 동생을 찾을 때까지 계속한다. 마치 가능한 모든 경우의 수를 탐색하는 것과 같음. 1차원 벡터(배열)의 map을 만들고, 수빈이의 시작지점에 1의 값을 넣고, 다음 이동 배열 값에 현재 위치의 값+1을 해주며 확산한다. 동생을 찾을 시 종료. 예외 처리 - 이전에 방문한 좌표는 패스 - 배열의 일정 크기를 넘으면 패스 - 0 0을 받을시 0을 출력 - 기타 반례모음 아래에. 반례모음 입력 6 11 정답 (6.. 2023. 7. 26.
[c++] 백준 불!(4179), BFS, 반례모음 문제 https://www.acmicpc.net/problem/4179 J와 F(불)이 미로에 있음. J는 F를 피해 미로를 빠져나와야 한다. 미로 밖으로 나오면 성공 #: 벽 .: 지나갈 수 있는 공간 J: 지훈이의 미로에서의 초기위치 (지나갈 수 있는 공간) F: 불이 난 공간 J가 불이 도달하기 전에 미로를 탈출 할 수 없는 경우 IMPOSSIBLE 을 출력한다. J가 미로를 탈출할 수 있는 경우에는 가장 빠른 탈출시간을 출력한다. 풀이 맵에서의 J와 F의 좌표를 모두 큐에 쌓고, 하나씩 BFS를 이용해 인접한 좌표로 이동한다. 핵심은 조건문을 통한 예외처리가 아닐까 싶다. 특이사항 - 불이 여러개일 수 있음. - J가 벽에 갇힐 수도 있음. 맵을 문자열로 구성하고, J나 F가 이동시에 현재 좌표에.. 2023. 7. 26.
[c++] 백준 토마토(7576), BFS, 반례모음 문제 https://www.acmicpc.net/problem/7576 격자 모양에 안익은 토마토와 익은 토마토가 존재 익은 토마토는 하루가 지날 때마다 인접한 안익은 토마토를 익게 만듬 모든 토마토를 익게 만드는데 걸리는 날짜는? 반례모음 2 2 1 1 1 1 0 5 3 0 -1 0 0 0 -1 -1 0 1 1 0 0 0 1 1 -1 2 2 -1 0 0 1 1 3 3 1 0 0 0 0 -1 0 -1 0 -1 3 3 0 0 1 0 0 1 0 0 1 2 3 3 -1 0 -1 0 1 0 -1 0 0 2 풀이 익은 토마토들 각각으로부터 BFS를 수행해 인접한 토마토를 익게 만든다. 마치 멀티 프로세스처럼 하루마다 동시에 수행하는 것처럼 보임 그러나, 이는 현재 익은 토마토의 위치 정보들을 큐에 쌓아서 순차적으.. 2023. 7. 26.
728x90