텐서플로는 구글이 2015년 11월 오픈소스로 공개한 딥러닝 라이브러리다. 코랩에는 이미 텐서플로가 설치되어 있기 때문에 쉽게 import 하여 사용할 수 있다.
텐서플로에는 저수준API와 고수준API가 있는데 케라스가 고수준API에 해당된다고 한다. 텐서플로와 케라스는 거의 동의어와 같다.
딥러닝 라이브러리가 다른 머신러닝 라이브러리와 다른 점은 GPU를 사용하여 인공 신경망을 훈련한다는 것! 이다.
딥러닝”Deep Learning”은 여러 층(Deep)을 가진 인공신경망(Artificial Neural Network, ANN)을 사용하여 머신러닝 학습(Learning)을 수행하는 것으로 심층학습이라고도 부른다.
머신러닝
은 사람이 먼저 특징을 추출하고 데이터를 정제해 컴퓨터가 학습할 수 있도록 만들어 줘야 한다. 반면에 딥러닝
은 사람이 하던 패턴 추출 작업이 사라지고 컴퓨터가 스스로 학습할 수 있도록 신경망을 컴퓨터에게 주고 경험을 통해 학습하도록 한다.
DNN 과정은 사람이 직접 관여할 수 없어 블랙박스 라고도 한다. 딥러닝에서 은닉층(히든레이어)을 분석하는 것이 너무 어렵기에 블랙박스 현상이 나타난다.
텐서는 쉽게 말해서 다차원 배열이다.
import tensorflow as tf
# 상수로 텐서 만들기
a = tf.constant([1, 2, 3]) # constant(리스트)
# 0으로 채워진 텐서 만들기
b = tf.zeros([3, 3]) # 3*3 0으로된 2차원 텐서
x = tf.constant([1, 2, 3])
y = tf.constant([4, 5, 6])
# 덧셈
z = x + y
# 곱셈
w = x * y
print(z)
print(w)
x = tf.constant([[1, 2], [3, 4]])
# 형태를 [4]로 변경
y = tf.reshape(x, [4])
# 이게 중요한 이유?
# pandas -> series 변환을 해서 연산!
# 딥러닝도 연산을 할때 동일하게 작업!
딥러닝 연산에서 reshape를 많이 쓴다고 한다. 낮은 차원으로 변환후에 연산을 하고 다시 원래대로 복구하는 식
import tensorflow as tf
from tensorflow import keras
import numpy as np
model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
# <keras.src.engine.sequential.Sequential at 0x7c2dd0232e00>
model 선언하기 전에 tf.random.set_seed(0)
를 적으면 값이 변하지 않는다.
model.compile(loss='mean_squared_error', optimizer='sgd')
xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)
model.fit(xs, ys, epochs=500)
pred = model.predict([5.0])
print(pred)
model.evaluate()
import matplotlib.pyplot as plt
plt.style.use('default')
plt.rcParams['figure.figsize'] = (4, 3)
plt.rcParams['font.size'] = 12
loss = history.history['loss']
plt.plot(loss)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.show()
x축은 에포크, y축은 손실로 그래프를 그리는 예제이다.