본문 바로가기

Python49

12.2 넘파이처럼 텐서플로 사용하기 기본적으로 텐서플로는 텐서(tensor)를 사용한다. 텐서는 차원에 따라 스칼라 혹은 배열이 될 수 있다. 그리고, 텐서는 넘파이 배열(ndarray)과 유사하기 때문에 넘파이 패키지가 익숙하면 좋다. 텐서의 생성 텐서를 생성하기 위해 tf.constant() 함수에 텐서로 만들기 원하는 값을 인자로 전달하면 된다. import tensorflow as tf tf.constant([1, 2, 3]) >>> # 다차원 배열 tf.constant([[1, 2, 3], [4, 5, 6]]) >>> # 데이터 타입 명시 tf.constant([1, 2, 3, 4, 5, 6], dtype=tf.float32) >>> 텐서의 인덱싱 텐서는 넘파이 배열 혹은 파이썬의 리스트처럼 대괄호를 통해 인덱스 참조가 가능하다... 2022. 3. 21.
# 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.
# 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.
# 0. 데이터 입력 파이프라인 API 해당 포스트에서는 데이터 입력 파이프라인을 빌드하기 위한 텐서플로우의 API들을 알아볼 것이다. 갑자기 시작부터 어려운 단어가 나왔다. 데이터 입력 파이프라인? 필자가 생각하기에는 데이터가 쌩짜배기로 모델에 주입되는 것이 아니라, 적합한 형태(shape)으로 변환되어야 주입되는데, 이 과정을 전처리하기 위한 과정이라고 생각한다. 그럼 지금부터 하나씩 알아보자. 우선 데이터셋의 shape를 직관적으로 이해하기 위해서는 다음과 같은 함수가 필요하다. 미리 정의해두고 시작하자. def show_dataset_shape(dataset): dataset_to_numpy = list(dataset.as_numpy_iterator()) shape = tf.shape(dataset_to_numpy) print(shap.. 2022. 3. 1.
# 5. Universal functions 이번 포스트에서는 universal function에 대해 알아볼 것이다. 넘파이에서는 np.sin, np.cos, np.exp와 같은 친숙한 수학적 함수들을 제공한다. 넘파이에서는 이러한 함수들을 universal function(범용 함수)이라고 부른다. 이러한 함수들은 피연산자 배열의 원소 단위로 연산이 수행되며, 결과를 새로운 행렬로 반환한다. B = np.arange(3) B >>> array([0, 1, 2]) np.exp(B) >>> array([1. , 2.71828183, 7.3890561 ]) np.sqrt(B) >>> array([0. , 1. , 1.41421356]) C = np.array([2., -1., 4.]) np.add(B, C) >>> array([2., 0., 6.]).. 2022. 2. 25.