TensorFlow는 Google이 제공하는 머신러닝 프레임워크입니다. 오픈소스 기반으로 Python과 함께 사용되어 딥러닝 알고리즘과 다양한 애플리케이션을 구현할 수 있으며, 연구 목적과 상용 환경 모두에서 널리 활용됩니다. TensorFlow는 NumPy와 다차원 배열을 기반으로 복잡한 수학 연산을 빠르게 처리할 수 있는 최적화 기법을 갖추고 있으며, 이러한 다차원 배열을 '텐서(tensor)'라고 부릅니다. 또한 심층 신경망(deep neural network) 작업도 완벽하게 지원합니다.
Windows 환경에서는 아래 명령어 한 줄로 'tensorflow' 패키지를 설치할 수 있습니다.
pip install tensorflow
텐서(Tensor)의 기본 개념
텐서는 TensorFlow에서 사용되는 핵심 데이터 구조로, 데이터 흐름 그래프(Data flow graph)에서 노드들을 연결하는 역할을 합니다. 텐서는 본질적으로 다차원 배열 또는 리스트이며, 다음 세 가지 주요 속성으로 특징지을 수 있습니다.
- 랭크(Rank) – 텐서의 차원 수를 나타냅니다. 정의된 텐서가 몇 차원인지를 의미합니다.
- 타입(Type) – 텐서 요소에 연결된 데이터 타입을 나타냅니다. 1차원, 2차원 또는 n차원 형태일 수 있습니다.
- 쉐이프(Shape) – 행과 열의 개수를 함께 나타낸 값입니다.
Fashion MNIST 데이터셋 소개
'Fashion MNIST' 데이터셋은 다양한 종류의 의류 이미지를 담고 있습니다. 10개 서로 다른 카테고리에 속하는 7만 장 이상의 회색조(grayscale) 이미지로 구성되어 있으며, 각 이미지는 28 x 28 픽셀의 저해상도 형식입니다.
이 글의 코드는 Google Colaboratory에서 실행했습니다. Google Colab은 브라우저에서 바로 Python 코드를 실행할 수 있게 해주며, 별도의 설정 없이 GPU(그래픽 처리 장치)에 무료로 접근할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어졌습니다.
코드 예제
print("An image from the test data is taken")
img = test_images[26]
print("The dimensions of the image are ")
print(img.shape)
print("The image is added to batch where it is the only entity")
img = (np.expand_dims(img,0))
print("The dimensions of the image now ")
print(img.shape)
my_pred = probability_model.predict(img)
print("The prediction made is ")
print(my_pred)
plot_value_array(1, my_pred[0], test_labels)
_ = plt.xticks(range(10), class_names, rotation=45)
np.argmax(my_pred[0])코드 출처 – https://www.tensorflow.org/tutorials/keras/classification
실행 결과
An image from the test data is taken The dimensions of the image are (28, 28) The image is added to batch where it is the only entity The dimensions of the image now (1, 28, 28) The prediction made is [[8.0459216e-07 1.7074371e-09 2.6175227e-02 1.8855806e-07 1.7909618e-01 2.1126857e-06 7.9472500e-01 7.5104166e-11 4.7921480e-07 1.6657851e-10]] 6
코드 설명
- 테스트 이미지의 차원 정보가 콘솔에 출력됩니다. 위 예제에서는 (28, 28) 크기의 이미지 하나를 가져왔습니다.
- 'expand_dims' 함수를 사용해 이미지에 배치(batch) 차원을 추가합니다. 모델은 여러 샘플을 동시에 처리하도록 최적화되어 있기 때문에, 단일 이미지도 배치 형태로 변환해야 합니다.
- 변환 후 이미지의 차원은 (1, 28, 28)이 되며, 배치 안에 이미지가 하나만 존재하는 형태입니다.
- 'predict' 함수는 리스트의 리스트를 반환하며, 각 내부 리스트는 배치 데이터에 포함된 각 이미지에 대한 예측 결과에 해당합니다.
- 예측하고자 하는 이미지의 결과값을 추출해 콘솔에 출력합니다.
- 마지막으로 'matplotlib' 라이브러리를 사용해 예측 확률을 막대 그래프(bar graph)로 시각화하고, 'np.argmax'를 통해 가장 높은 확률을 가진 클래스 인덱스(여기서는 6번, 즉 셔츠)를 확인합니다.