Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

TensorFlow와 Python으로 Stack Overflow 질문 데이터셋 모델 학습하는 방법


TensorFlow는 Google에서 제공하는 머신러닝 프레임워크입니다. 오픈소스로 공개되어 있으며, Python과 함께 사용하여 알고리즘 구현, 딥러닝 애플리케이션 개발 등 다양한 작업에 활용할 수 있습니다. 연구 목적뿐만 아니라 실제 운영(프로덕션) 환경에서도 널리 사용됩니다.

TensorFlow에는 복잡한 수학 연산을 빠르게 처리할 수 있는 최적화 기법들이 내장되어 있습니다. 이는 내부적으로 NumPy와 다차원 배열을 활용하기 때문인데, 이 다차원 배열을 흔히 '텐서(tensor)'라고 부릅니다.

이 프레임워크는 심층 신경망(deep neural network) 작업을 지원하며, 뛰어난 확장성을 갖추고 있고 다양한 인기 데이터셋도 함께 제공합니다. GPU 연산을 활용하고 리소스 관리를 자동화하며, 방대한 머신러닝 라이브러리를 포함하고 있어 문서화와 커뮤니티 지원 역시 잘 되어 있습니다. 또한 딥러닝 모델을 실행하고 학습시켜, 해당 데이터셋의 관련 특성을 예측하는 애플리케이션을 손쉽게 만들 수 있습니다.

'tensorflow' 패키지는 Windows 환경에서 아래 명령어 한 줄로 설치할 수 있습니다.

pip install tensorflow

텐서는 TensorFlow에서 사용하는 핵심 데이터 구조로, 플로우 다이어그램의 엣지(edge)를 연결하는 역할을 합니다. 이 플로우 다이어그램을 '데이터 플로우 그래프(Data flow graph)'라고 합니다. 텐서는 결국 다차원 배열 또는 리스트에 불과하며, 다음 세 가지 주요 속성으로 식별할 수 있습니다.

  • 랭크(Rank) − 텐서의 차원 수를 나타냅니다. 정의된 텐서의 차수(order), 즉 차원의 개수로 이해할 수 있습니다.

  • 타입(Type) − 텐서 요소에 연결된 데이터 타입을 나타냅니다. 1차원, 2차원 또는 n차원 텐서가 될 수 있습니다.

  • 형태(Shape) − 행과 열의 개수를 함께 나타낸 값입니다.

아래 코드는 Google Colaboratory에서 실행했습니다. Google Colab(Colaboratory)은 브라우저에서 바로 Python 코드를 실행할 수 있게 해주며, 별도의 설정 없이 무료로 GPU(그래픽 처리 장치)를 사용할 수 있다는 큰 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어졌습니다.

예제

다음은 코드 스니펫입니다.

print("A bag-of-words linear model is built to train the stackoverflow dataset")
binary_model = tf.keras.Sequential([layers.Dense(4)])
binary_model.compile(
   loss=losses.SparseCategoricalCrossentropy(from_logits=True),
   optimizer='adam',
   metrics=['accuracy'])
history = binary_model.fit(
   binary_train_ds, validation_data=binary_val_ds, epochs=10)

코드 출처 − https://www.tensorflow.org/tutorials/load_data/text

출력 결과

A bag-of-words linear model is built to train the stackoverflow dataset
Epoch 1/10
188/188 [==============================] - 4s 19ms/step - loss: 1.2450 - accuracy: 0.5243 -
val_loss: 0.9285 - val_accuracy: 0.7645
Epoch 2/10
188/188 [==============================] - 1s 3ms/step - loss: 0.8304 - accuracy: 0.8172 -
val_loss: 0.7675 - val_accuracy: 0.7895
Epoch 3/10
188/188 [==============================] - 1s 3ms/step - loss: 0.6615 - accuracy: 0.8625 -
val_loss: 0.6824 - val_accuracy: 0.8050
Epoch 4/10
188/188 [==============================] - 1s 3ms/step - loss: 0.5604 - accuracy: 0.8833 -
val_loss: 0.6291 - val_accuracy: 0.8125
Epoch 5/10
188/188 [==============================] - 1s 3ms/step - loss: 0.4901 - accuracy: 0.9034 -
val_loss: 0.5923 - val_accuracy: 0.8210
Epoch 6/10
188/188 [==============================] - 1s 3ms/step - loss: 0.4370 - accuracy: 0.9178 -
val_loss: 0.5656 - val_accuracy: 0.8255
Epoch 7/10
188/188 [==============================] - 1s 3ms/step - loss: 0.3948 - accuracy: 0.9270 -
val_loss: 0.5455 - val_accuracy: 0.8290
Epoch 8/10
188/188 [==============================] - 1s 3ms/step - loss: 0.3601 - accuracy: 0.9325 -
val_loss: 0.5299 - val_accuracy: 0.8295
Epoch 9/10
188/188 [==============================] - 1s 3ms/step - loss: 0.3307 - accuracy: 0.9408 -
val_loss: 0.5177 - val_accuracy: 0.8335
Epoch 10/10
188/188 [==============================] - 1s 3ms/step - loss: 0.3054 - accuracy: 0.9472 -
val_loss: 0.5080 - val_accuracy: 0.8340

설명

  • 신경망은 'Sequential' API를 사용하여 생성됩니다.

  • 'binary' 형식으로 벡터화된 데이터에 대해 선형 모델인 bag-of-words 모델을 학습시킵니다.