dev_AI_framework
함수형 API 와 KerasTensor
명징직조지훈
2024. 10. 23. 18:16
# 필요한 라이브러리 임포트
import numpy as np
from keras import layers, models
# 입력 정의 (입력 크기: 32)
inputs = layers.Input(shape=(32,))
# 첫 번째 Dense 레이어 (유닛 64, 활성화 함수 ReLU)
x = layers.Dense(64, activation='relu')(inputs)
print(x, "뭔지 보자", type(x))
# 두 번째 Dense 레이어 (유닛 64, 활성화 함수 ReLU)
x = layers.Dense(64, activation='relu')(x)
print(x, "뭔지 보자")
# 출력 Dense 레이어 (유닛 10, 활성화 함수 소프트맥스)
outputs = layers.Dense(10, activation='softmax')(x)
# 모델 정의 (입력과 출력 설정)
model = models.Model(inputs=inputs, outputs=outputs)
# 모델 컴파일 (Adam 옵티마이저, categorical_crossentropy 손실 함수, 정확도 평가 지표)
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 간단한 데이터 생성 (1000개의 샘플, 32개의 특징)
x_train = np.random.random((1000, 32)) # 랜덤 입력 데이터
y_train = np.random.randint(10, size=(1000,)) # 0~9 범위의 랜덤 라벨
y_train = np.eye(10)[y_train] # one-hot 인코딩
# 모델 학습 (배치 크기: 32, 에포크: 10)
model.fit(x_train, y_train, batch_size=32, epochs=10)
# 모델 구조 출력
model.summary()
x 의 type 은 KerasTensor 이다.
KerasTensor 클래스는
심볼릭 텐서와 관련된 Keras 의 기능을 확장하고 관리할 수 있도록 도와준다.
주요 목적으로 KerasTensor 를 통해 Keras 모델을 정의할 때 사용하는 입력과 출력을 캡슐화, 심볼릭 텐서를 수학 연산에 사용할 수 있게 도와주는 것
1. KerasTensor 클래스
심볼릭 텐서를 정의하는 클래스, 이 텐서는 실제 데이터를 포함하지 않고, 텐서의 모양과 타입만을 저장하는 역할만 수행, 이를 사용해 Keras 의 계산 그래프를 구성하거나 모델을 정의할 수 있다.
- 입력 : 모델의 입력 데이터를 나타낸다. 입력 데이터의 형상을 정의한다.
- 출력 : 모델의 출력 텐서를 나타낸다. 입력 텐서가 여러 레이어를 거친 후 최종적으로 출력되는 텐서
- 계산 그래프 구성 : Model(inputs = inputs, outputs = outputs) 는 입력 텐서와 출력 텐서를 기반으로 전체 계산 그래프를 정의한다. Keras 에서 모델은 기본적으로 계산 그래프로 표현되며, inputs 에서 시작해, 각 레이어를 거쳐 outputs 에 도달하는 일련의 연산들이 연결된 구조, 이 과정에서 텐서의 크기와 타입이 각 레이어를 통해 어떻게 변환되는지 추적한다.
- 모델 객체 생성 : Model(inputs, outputs) 는 계산 그래프를 정의하고, 이를 기반으로 새로운 모델 객체를 반환한다.