본문 바로가기

dev_AI_framework

현재 상황... 막막하네 08/28 직렬화??!?!!

모델의 형태를 어떻게 입력 받을지, 

입력 받는 형태에 따라 클래스들의 구조를 어떻게 짤지, 각 클래스, 메서드는 어떠한 역할을 수행할 지, 어떤 정보까지 저장해야 할 지

모델의 정보를 어떻게 저장하고 전달할지

 

아직 C++ 연동 및 계산 그래프는 생각도 못 했는데, 

먼저 모델 정보가 저장되고 출력되는 형태를 정의하고 살펴보자구~~

model.fit 전까지 구현해보자잇~!~!~! 할 수있지??

 

다시 돌아와서 keras 의 시퀀셜 형태로 모델을 입력받을거라고 가정할거야

sequential 가 최고 엄마 클래스가 되겠지?? 시팔 왜 layer 를 상속받는데 (모델이 또 다른 모델의 레이어가 될 수 있어서래 ㅋ 어이없어 증말 ㅋ)

layer 가 진짜 최고 엄마 클래스 (백엔드 레이어, 오퍼레이터, 케라스 세이브 에이블 이건 일단 무시;;)

 

모델 정보를 전달하기 위해 직렬화는 필수... pickle 모듈을 사용하자~!

import json

class ExampleClass:
    def __init__(self, value):
        self.value = value

    def to_dict(self):
        return {"value": self.value}

# 커스텀 JSON 인코더
class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, ExampleClass):
            return obj.to_dict()
        return json.JSONEncoder.default(self, obj)

# 인스턴스를 포함한 딕셔너리
data = {
    "number": 42,
    "text": "Hello, World!",
    "instance": ExampleClass(10)
}

# JSON으로 직렬화
json_data = json.dumps(data, cls=CustomEncoder)
print("JSON 직렬화된 데이터:", json_data)

이 방법은 인스턴스의 상태만 저장하고자 할 때 유용하며, 실제 인스턴스를 저장하는 것보다는 더 안전하고 범용적인 방법입니다

 

성능과 데이터 크기가 중요할 때는 Protocol Buffers 또는 FlatBuffers와 같은 바이너리 직렬화 형식을 고려해 볼 수 있습니다