
1. 텐서플로 개요
텐서플로(TensorFlow)는 구글에서 개발한 오픈소스 머신러닝 프레임워크이다. 딥러닝 모델을 구현하고 학습시키기 위한 다양한 도구와 라이브러리를 제공하여 머신러닝 개발자들이 높은 수준의 모델을 쉽게 구축할 수 있게 도와준다.
텐서플로는 그래프 형태로 동작하는데 그래프는 노드(node)와 에지(edge)로 이루어져 있으며, 노드는 수학 연산을 수행하고 에지는 노드 간의 데이터 흐름을 나타낸다. 이러한 그래프 기반의 방식은 병렬 처리에 최적화되어 있어 대규모 데이터 셋을 빠르게 처리할 수 있다.
2. 텐서플로 특징
텐서플로의 특징은 다음과 같다.
1) 유연성
텐서플로는 머신러닝 모델의 구현을 위한 다양한 도구와 라이브러리를 제공하며, 다양한 플랫폼에서 동작할 수 있도록 구성되어 있습니다.
2) 확장성
텐서플로는 대규모 데이터셋을 다룰 수 있도록 분산 처리 기능을 제공합니다. 또한, GPU와 TPU 등 다양한 하드웨어를 지원하여 더욱 빠른 모델 학습이 가능합니다.
3) 자동 미분
텐서플로는 자동 미분 기능을 내장하고 있어, 미분 계산을 수동으로 구현할 필요가 없습니다.
4) 쉬운 디버깅
텐서플로는 그래프를 시각화하는 기능과 디버깅 정보를 제공하는 기능 등을 통해 머신러닝 모델의 디버깅을 쉽게 할 수 있도록 도와줍니다.
5) 커뮤니티
텐서플로는 구글을 비롯한 다양한 커뮤니티에서 활발한 지원과 개발이 이루어지고 있으며, 다양한 예제와 튜토리얼을 제공합니다.
3. 텐서플로 설치
다음의 명령어로 mytensor라는 이름으로 가상환경을 만든다.
> python -m venv mytensor

그리고 activate를 실행하여 가상환경을 활성화한다.
> d:/venvs/mytensor/scripts/activate

tensorflow 패키지를 설치한다.
> pip install tensorflow

4. 텐서플로 컨테이너
다음의 명령어로 텐서플로 이미지를 내려받는다.
> docker pull tensorflow/tensorflow:latest

다음의 명령어로 텐서플로를 컨테이너로 실행한다.
> docker run -it -p 8888:8888 tensorflow/tensorflow:latest-jupyter

크롬으로 텐서플로를 실행할 수 있는 주피터를 바로 사용할 수 있다.

tensorflow:latest-jupyter 컨테이너에 설치되어 있는 파이썬 패키지 목록이다.
> pip list
Package Version
---------------------------- -----------------
absl-py 1.4.0
anyio 3.6.2
argon2-cffi 21.3.0
argon2-cffi-bindings 21.2.0
arrow 1.2.3
asttokens 2.2.1
astunparse 1.6.3
attrs 22.2.0
backcall 0.2.0
beautifulsoup4 4.12.0
bleach 6.0.0
cachetools 5.3.0
certifi 2019.11.28
cffi 1.15.1
chardet 3.0.4
comm 0.1.3
contourpy 1.0.7
cycler 0.11.0
dbus-python 1.2.16
debugpy 1.6.6
decorator 5.1.1
defusedxml 0.7.1
executing 1.2.0
fastjsonschema 2.16.3
flatbuffers 23.3.3
fonttools 4.39.2
fqdn 1.5.1
gast 0.4.0
google-auth 2.16.2
google-auth-oauthlib 0.4.6
google-pasta 0.2.0
grpcio 1.51.3
h5py 3.8.0
idna 2.8
importlib-metadata 6.1.0
importlib-resources 5.12.0
ipykernel 6.22.0
ipython 8.11.0
ipython-genutils 0.2.0
ipywidgets 8.0.5
isoduration 20.11.0
jax 0.4.6
jedi 0.18.2
Jinja2 3.1.2
jsonpointer 2.3
jsonschema 4.17.3
jupyter 1.0.0
jupyter_client 8.1.0
jupyter-console 6.6.3
jupyter_core 5.3.0
jupyter-events 0.6.3
jupyter-http-over-ws 0.0.8
jupyter_server 2.5.0
jupyter_server_terminals 0.4.4
jupyterlab-pygments 0.2.2
jupyterlab-widgets 3.0.6
keras 2.12.0
kiwisolver 1.4.4
libclang 16.0.0
Markdown 3.4.3
MarkupSafe 2.1.2
matplotlib 3.7.1
matplotlib-inline 0.1.6
mistune 2.0.5
nbclassic 0.5.3
nbclient 0.7.2
nbconvert 7.2.10
nbformat 5.8.0
nest-asyncio 1.5.6
notebook 6.5.3
notebook_shim 0.2.2
numpy 1.23.5
oauthlib 3.2.2
opt-einsum 3.3.0
packaging 23.0
pandocfilters 1.5.0
parso 0.8.3
pexpect 4.8.0
pickleshare 0.7.5
Pillow 9.4.0
pip 23.0.1
pkgutil_resolve_name 1.3.10
platformdirs 3.1.1
prometheus-client 0.16.0
prompt-toolkit 3.0.38
protobuf 4.22.1
psutil 5.9.4
ptyprocess 0.7.0
pure-eval 0.2.2
pyasn1 0.4.8
pyasn1-modules 0.2.8
pycparser 2.21
Pygments 2.14.0
PyGObject 3.36.0
pyparsing 3.0.9
pyrsistent 0.19.3
python-apt 2.0.1+ubuntu0.20.4.1
python-dateutil 2.8.2
python-json-logger 2.0.7
PyYAML 6.0
pyzmq 25.0.2
qtconsole 5.4.1
QtPy 2.3.0
requests 2.22.0
requests-oauthlib 1.3.1
requests-unixsocket 0.2.0
rfc3339-validator 0.1.4
rfc3986-validator 0.1.1
rsa 4.9
scipy 1.10.1
Send2Trash 1.8.0
setuptools 67.6.0
six 1.14.0
sniffio 1.3.0
soupsieve 2.4
stack-data 0.6.2
tensorboard 2.12.0
tensorboard-data-server 0.7.0
tensorboard-plugin-wit 1.8.1
tensorflow-cpu 2.12.0
tensorflow-estimator 2.12.0
tensorflow-io-gcs-filesystem 0.31.0
termcolor 2.2.0
terminado 0.17.1
tinycss2 1.2.1
tornado 6.2
traitlets 5.9.0
typing_extensions 4.5.0
uri-template 1.2.0
urllib3 1.25.8
wcwidth 0.2.6
webcolors 1.12
webencodings 0.5.1
websocket-client 1.5.1
Werkzeug 2.2.3
wheel 0.40.0
widgetsnbextension 4.0.6
wrapt 1.14.1
zipp 3.15.0
텐서플로를 이용하여 MNIST 데이터셋을 읽어 DNN을 실행해 본다.
import tensorflow as tf
# MNIST 데이터셋 로드
data_train, data_test = tf.keras.datasets.mnist.load_data()
(x_train, y_train) = data_train
(x_test, y_test) = data_test
# MNIST 데이터셋 확인
print('x_train.shape =', x_train.shape)
print('y_train.shape =', y_train.shape)
print('x_test.shape =', x_test.shape)
print('y_test.shape =', y_test.shape)
# 데이터 정규화
x_train = x_train / 255
x_test = x_test / 255
# 모델 생성
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(32, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
# 모델 컴파일
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 모델 학습
model.fit(x_train, y_train, epochs=10)
# 평가
model.evaluate(x_test, y_test, verbose=2)
실행 결과
x_train.shape = (60000, 28, 28)
y_train.shape = (60000,)
x_test.shape = (10000, 28, 28)
y_test.shape = (10000,)
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
flatten (Flatten) (None, 784) 0
dense (Dense) (None, 128) 100480
dense_1 (Dense) (None, 32) 4128
dropout (Dropout) (None, 32) 0
dense_2 (Dense) (None, 10) 330
=================================================================
Total params: 104,938
Trainable params: 104,938
Non-trainable params: 0
_________________________________________________________________
Epoch 1/10
1875/1875 [==============================] - 14s 7ms/step - loss: 0.3244 - accuracy: 0.9042
Epoch 2/10
1875/1875 [==============================] - 7s 3ms/step - loss: 0.1450 - accuracy: 0.9582
Epoch 3/10
1875/1875 [==============================] - 7s 4ms/step - loss: 0.1034 - accuracy: 0.9688
Epoch 4/10
1875/1875 [==============================] - 6s 3ms/step - loss: 0.0835 - accuracy: 0.9747
Epoch 5/10
1875/1875 [==============================] - 7s 4ms/step - loss: 0.0681 - accuracy: 0.9795
Epoch 6/10
1875/1875 [==============================] - 7s 4ms/step - loss: 0.0587 - accuracy: 0.9821
Epoch 7/10
1875/1875 [==============================] - 8s 4ms/step - loss: 0.0509 - accuracy: 0.9841
Epoch 8/10
1875/1875 [==============================] - 7s 4ms/step - loss: 0.0435 - accuracy: 0.9863
Epoch 9/10
1875/1875 [==============================] - 7s 4ms/step - loss: 0.0398 - accuracy: 0.9870
Epoch 10/10
1875/1875 [==============================] - 7s 4ms/step - loss: 0.0361 - accuracy: 0.9883
313/313 - 1s - loss: 0.1018 - accuracy: 0.9769 - 755ms/epoch - 2ms/step
6. CNN(Convolutional Neural Network)
텐서플로를 이용하여 MNIST 데이터셋을 읽어 CNN을 실행해 본다.
import tensorflow as tf
import numpy as np
# MNIST 데이터셋 로드
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 데이터 변환
x_train = x_train.reshape(
x_train.shape[0], x_train.shape[1], x_train.shape[2], 1)
x_test = x_test.reshape(x_test.shape[0], x_test.shape[1], x_test.shape[2], 1)
# 데이터 정규화
x_train = x_train / 255.0
x_test = x_test/255.0
y_train = tf.one_hot(y_train.astype(np.int32), depth=10)
y_test = tf.one_hot(y_test.astype(np.int32), depth=10)
# 모델 생성 (합성곱 층 만들기)
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (5, 5), padding='same', activation='relu', input_shape=(28, 28, 1)),
tf.keras.layers.Conv2D(32, (5, 5), padding='same', activation='relu'),
tf.keras.layers.MaxPool2D(),
tf.keras.layers.Dropout(0.25),
tf.keras.layers.Conv2D(64, (3, 3), padding='same', activation='relu'),
tf.keras.layers.Conv2D(64, (3, 3), padding='same', activation='relu'),
tf.keras.layers.MaxPool2D(strides=(2, 2)),
tf.keras.layers.Dropout(0.25),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(10, activation='softmax')
])
# 모델 컴파일
model.compile(optimizer=tf.keras.optimizers.RMSprop(epsilon=1e-08),
loss='categorical_crossentropy', metrics=['acc'])
model.summary()
# 모델 학습
history = model.fit(x_train, y_train,
batch_size=64,
epochs=5,
validation_split=0.1)
# 평가
test_loss, test_acc = model.evaluate(x_test, y_test)
print(test_loss, test_acc)
실행 결과
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 28, 28, 32) 832
conv2d_1 (Conv2D) (None, 28, 28, 32) 25632
max_pooling2d (MaxPooling2D (None, 14, 14, 32) 0
)
dropout (Dropout) (None, 14, 14, 32) 0
conv2d_2 (Conv2D) (None, 14, 14, 64) 18496
conv2d_3 (Conv2D) (None, 14, 14, 64) 36928
max_pooling2d_1 (MaxPooling (None, 7, 7, 64) 0
2D)
dropout_1 (Dropout) (None, 7, 7, 64) 0
flatten (Flatten) (None, 3136) 0
dense (Dense) (None, 128) 401536
dropout_2 (Dropout) (None, 128) 0
dense_1 (Dense) (None, 10) 1290
=================================================================
Total params: 484,714
Trainable params: 484,714
Non-trainable params: 0
_________________________________________________________________
Epoch 1/5
844/844 [==============================] - 215s 252ms/step - loss: 0.2219 - acc: 0.9313 - val_loss: 0.0535 - val_acc: 0.9848
Epoch 2/5
844/844 [==============================] - 147s 174ms/step - loss: 0.0778 - acc: 0.9767 - val_loss: 0.0364 - val_acc: 0.9893
Epoch 3/5
844/844 [==============================] - 147s 174ms/step - loss: 0.0606 - acc: 0.9832 - val_loss: 0.0310 - val_acc: 0.9910
Epoch 4/5
844/844 [==============================] - 137s 163ms/step - loss: 0.0509 - acc: 0.9861 - val_loss: 0.0290 - val_acc: 0.9923
Epoch 5/5
844/844 [==============================] - 135s 160ms/step - loss: 0.0462 - acc: 0.9869 - val_loss: 0.0301 - val_acc: 0.9928
313/313 [==============================] - 6s 19ms/step - loss: 0.0322 - acc: 0.9911
0.03216882422566414 0.991100013256073

'✨ 딥러닝·머신러닝' 카테고리의 다른 글
| 사이킷런 - 분류 알고리즘으로 붓꽃(iris)의 품종을 판별 (0) | 2026.06.15 |
|---|---|
| 케라스(Keras) - 최소한의 코드로 딥러닝을 구현한다 (0) | 2026.06.15 |
| 신경망의 발견 - 신경망에서 단순 퍼셉트론, 다중 퍼셉트론, 딥러닝까지 (0) | 2026.06.15 |
| 합성곱 신경망(CNN) - 합성곱 신경망으로 MNIST 손글씨를 학습 (0) | 2026.06.13 |
| Tensorflow - 텐서플로를 사용해 MNIST를 학습 (0) | 2026.06.13 |
댓글