본문 바로가기

전체 글112

12.1 텐서플로 훑어보기 텐서플로는 2015년 11월 오픈소스로 공개된 딥러닝 라이브러리이다. 텐서플로를 통해 이미지 분류, 자연어 처리, 추천 시스템, 시계열 예측 등 다양한 테스크에 적용이 가능하다. 텐서플로가 제공하는 것들 GPU 연산 지원 분산 컴퓨팅 지원 JIT (Just-In-Time) 컴파일러 계산 그래프 (플랫폼에 중립적인 포맷으로 내보내기 가능 - 환경에 의존성이 덜함) 자동 미분(auto diff) 및 고성능 옵티마이저(RMSProp, Nadam, ..) 고수준 API 서브 모듈(tf.keras)가 가장 많이 사용된다. 하지만, 더 높은 자유도 있는 구현을 위해서는 저수준 API(tf.nn ~ tf.initializers)를 사용할 필요가 있다. 가장 저수준의 텐서플로 API는 C++로 구현되어 있다. 필요하다.. 2022. 3. 19.
# 0. ImageNet Classification with Deep ConvolutionalNeural Networks Prerequisite CNN (Convolutional Neural Network) https://dev-ryuon.tistory.com/39?category=942362 # 1. Convolution Neural Network (CNN) - Theory 이번 포스트에서는 합성곱(Convolution) 연산을 기반으로 이미지에서 특징을 검출하는데에 적합한 신경망인 CNN에 대해 알아본다. 먼저 CNN의 전체적인 구조에 대해 살펴보자. Input으로 이미지가 들 dev-ryuon.tistory.com saturating vs non-saturating saturate는 사전적으로 '포화하다'라는 의미를 지니고 있다. saturing은 특정 구간에 도달하면 수렴하는 함수를 의미한다. 반대로 non-satu.. 2022. 3. 17.
# 1. tf.keras.backend.permute_dimensions a = np.arange(12).reshape((3, 4)) t = tf.constant(a) t >>> tf.Tensor( [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]], shape=(3, 4), dtype=int32) 위와 같은 (3, 4) dimension을 갖는 텐서가 있다. axis=0은 3개의 원소, axis=1은 4개의 원소가 존재한다. 이 텐서를 전치시키려고 한다면 다음과 같이 할 수 있다. tf.keras.backend.permute_dimensions(t, pattern=(1, 0)) >>> 여기서 중요한 인자는 pattern인데, (1, 0)의 의미는 텐서 t를 (axis=1의 값, axis=0의 값)차원으로 재구성한다는 의미이다. 즉, (4, 3) 차원으로 변형되.. 2022. 3. 17.
# 6. np.meshgrid 이번 포스트에서는 격자형 그리드를 생성하는 방법에 대해 포스팅한다. 격자형 그리드란 공간에서 일정한 간격으로 포인트를 찍은 것을 말한다. 격자형 그리드를 통해 특정 데이터 공간을 명확하게 그릴 수 있다. 이를 테면 아래와 같이 그릴 수 있다. x = np.linspace(-3, 3, 7) # array([-3., -2., -1., 0., 1., 2., 3.]) y = np.linspace(-2, 2, 5) # array([-2., -1., 0., 1., 2.]) x, y = np.meshgrid(x, y) print(x.shape, y.shape) >>> (5, 7) (5, 7) x와 y를 일정한 간격으로 포인트를 찍는 함수인 np.linspace를 호출하여 구성했다. 주어진 x, y에 대하여 np.me.. 2022. 3. 17.
# 11. PCA (Principal Component Analysis) 이론 PCA는 고차원의 데이터의 분포를 유지한채(최대한 중요한 정보를 유지한채) 차원을 낮추기 위한 알고리즘이다. 고차원에서 저차원으로 변환하는 과정에는 초평면 혹은 벡터에 정사영 혹은 투영(projection) 과정이 수행된다. 우선, 고차원 데이터에 대한 데이터의 분포를 파악하는 것이 중요하다. 분포는 데이터가 어느정도 넓게 퍼져있는가를 의미한다. 만약 위와 같은 2차원 파란색 데이터가 존재한다고 가정할 때, 1~3번 선중 어느 선이 가장 데이터를 잘 표현한다고 할 수 있을까? 직관적으로 보았을 때, 데이터가 가장 넓게 분포한 방향으로 기울어진 2번 선을 선택할 수 있을 것이다. 2번 선(벡터)에 대해 사영시키면 빨간점으로 이루어진 데이터들을 볼 수 있다. 이 점들은 하나의 선(1차원)으로 표현되며 .. 2022. 3. 7.
# 20. Counter 이번 포스트에서는 파이썬의 기본 모듈인 collections 모듈중에서 Counter에 대해 알아볼 것이다. Counter 클래스는 기본적으로 dict(딕셔너리)클래스를 상속받고 있다. 해당 클래스는 요소의 빈도수를 체크하기 적합한 자료형이다. 우선 Counter 클래스를 사용하지 않고 요소의 빈도수를 체크하려면 딕셔너리를 사용할 것이다. corpus = "abcdeabcdabcaba" d = dict() for c in corpus: d.setdefault(c, 0) d[c] += 1 d >>> {'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1} 위 코드처럼 딕셔너리를 사용하여 각 문자들의 빈도수를 매핑할 수 있다. 하지만, 이는 Counter를 알고있다면 for문이 불필요하게 사.. 2022. 3. 1.