| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- 보안
- widget
- gameplay tag
- Multiplay
- Replication
- gas
- os
- ability task
- C++
- MAC
- 게임 개발
- attribute
- rpc
- 언리얼 엔진
- stride
- local prediction
- gameplay effect
- 언리얼엔진
- gameplay ability system
- Aegis
- linear regression
- 유니티
- animation
- CTF
- UI
- listen server
- Unreal Engine
- unity
- photon fusion2
- 게임개발
- Today
- Total
Replicated
Keras 개요 본문
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나 멀티 코어 이용 시 해결 방법 없음