Replicated

Keras 개요 본문

학부/딥러닝

Keras 개요

라구넹 2025. 10. 18. 22:07

Keras

- 파이썬으로 구현된 간결한 딥러닝 라이브러리

- 비전문가도 쉽게 딥러닝 모델을 개발하고 활용 가능

- 직관적 API

- 내부적으론 Tensorflow, Theano, CNTK 등의 딥러닝 엔진 (keras 3부터 PyTorch 지원)

- 구글 엔지니어인 프랑소와 쏠레에 의해 개발, 유지보수

 

특징

모듈화

- Keras에서 제공하는 모든 모듈은 독립적, 설정 가능, 서로 연결 가능

- 신경망층, 비용함수, 최적화, 활성함수, 정규화 기법 등이 모두 독립적 모듈로 제공

- 이들을 조합하여 새로운 모델 구성

최소주의

- 각 모듈은 짧고 간결, 쉽게 이해 가능

쉬운 확장성

- 새로운 클래스나 함수로 모듈을 아주 쉽게 추가 가능

파이썬 기반

- 파이썬 내에서 모델의 구현 가능


KerasCV, KerasNLP

- 다양한 task의 최신 모델을 코드 몇 줄로 사용 가능

# load required modules
from keras.models import Sequential
from keras.layers import Dense, Input
from keras.utils import to_categorical
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

dataframe = pd.read_csv("/content/gdrive/MyDrive/Data/iris.csv")
dataset = dataframe.values
X = dataset[:,0:4].astype(float)
Y = dataset[:,4]

# encode class values as integers
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)

# one hot encoding
dummy_y = to_categorical(encoded_Y)

# Divide train, test
train_X, test_X, train_y, test_y = train_test_split(X,
dummy_y, test_size=0.4, random_state=321)

데이터 준비

 

epochs = 50
batch_size = 10

model = Sequential()
model.add(Input(shape=(4,)))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(3, activation='softmax'))
model.summary()

model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])

피쳐 4개짜리 모델

입력4 - 은닉10 - 은닉10 - 출력3

optimizer는 학습 속도를 빠르고 안정적이게 만드는 역할

첫번째 50?

피쳐 4개, 첫번째 은닉층 10개

-> weight 4*10 + 노드 10개

 

disp = model.fit(train_X, train_y,
                 batch_size=batch_size,
                 epochs=epochs,
                 verbose=1, 
                 validation_data=(test_X, test_y))

학습 데이터 정확도, 밸리데이션 정확도

pred = model.predict(test_X)
print(pred)
y_classes = [np.argmax(y, axis=None, out=None) for y in pred]
print(y_classes)

score = model.evaluate(test_X, test_y, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

plt.plot(disp.history['accuracy'])
plt.plot(disp.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()

이렇게 에폭당 정확도 보여줄 수도 있음

 

for lay in model.layers:
  print(lay.name)
  print(lay.get_weights())

각 레이어별 이름과 가중치 출력

 

model.save('path/to/location')

from tensorflow import keras
model = keras.models.load_model('path/to/location')

모델 저장, 로드도 가능

 

* 모델의 재현성 문제

모델을 훈련할 때마다 결과가 다르게 나옴

가중치가 초기화에 랜덤성이 있기 때문

global seed, local seed를 이용하여 해결 가능

global seed: 프로그램 전체에 적용

local seed: 함수 내에서 seed를 이용하는 경우

GPU나 멀티 코어 이용 시 해결 방법 없음

'학부 > 딥러닝' 카테고리의 다른 글

Keras CNN  (0) 2025.10.25
Keras - MNIST  (0) 2025.10.25
DNN  (0) 2025.10.18
신경망 학습  (0) 2025.10.18
인공신경망 개요  (0) 2025.10.18