2025년, 코딩은 선택이 아닌 필수!

2025년 모든 학교에서 코딩이 시작 됩니다. 먼저 준비하는 사람만이 기술을 선도해 갑니다~

강의자료/머신러닝

keras 2.x -> keras 3.x 으로 변경 되면서 수정 되는 사항

원당컴1 2024. 8. 8. 09:33

코랩이 Keras 3.0 으로 업데이트 되면서 2.0에서 사용되는 문법들이 안 되는 경우가 있어서 정리 해 보았습니다.

향후 지속적으로 업데이트 될 예정입니다.

 

모델 input 확인시

2.x
model.input
3.x
model.inputs
=>  : 모델의 input 이 사라지고 inputs 로 처리 됨
 
 

모델 텐서플로우라이트 변환시

 
2.x
 
export_dir = 'saved_model/1'
tf.saved_model.save(model, export_dir)
converter = tf.lite.TFLiteConverter.from_saved_model(export_dir)
 
3.x
export_dir = 'saved_model/1'
model.export(export_dir, "tf_saved_model")
converter = tf.lite.TFLiteConverter.from_saved_model(export_dir)

 

 mobilenet_v2 전이학습을 할때

2.x

handle_base, pixels, FV_SIZE = ("mobilenet_v2", 224, 1280)
MODULE_HANDLE ="https://tfhub.dev/google/tf2-preview/{}/feature_vector/4".format(handle_base)
IMAGE_SIZE = (pixels, pixels)
feature_extractor = hub.KerasLayer(MODULE_HANDLE,
                                   input_shape=IMAGE_SIZE + (3,), 
                                   output_shape=[FV_SIZE],
                                   trainable=False)
                                   

model = tf.keras.Sequential([
            feature_extractor,
            tf.keras.layers.Dense(num_classes, activation='softmax')
        ])

3.x

handle_base, pixels, FV_SIZE = ("mobilenet_v2", 224, 1280)
MODULE_HANDLE ="https://tfhub.dev/google/tf2-preview/{}/feature_vector/4".format(handle_base)
IMAGE_SIZE = (pixels, pixels)
feature_extractor = hub.KerasLayer(MODULE_HANDLE,
                                   input_shape=IMAGE_SIZE + (3,), 
                                   output_shape=[FV_SIZE],
                                   trainable=False)
                                   

model = tf.keras.Sequential([
            tf.keras.layers.Lambda(lambda x: feature_extractor(x)),
            tf.keras.layers.Dense(num_classes, activation='softmax')
        ])

층을 쌓을 때 KerasLayer를 직접적으로 추가 할 수 없고 feature_extractor을 keras.layers.Lambda를 사용하여 래핑하여 사용함

 

모델 컴파일시

2.x

model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')

3.x

model.compile(loss='sparse_categorical_crossentropy', metrics=['accuracy'])

metrics 에 리스트 형태로 전달 해야 됨

 

모델 저장시

2.x

model.save_weights('dropout_weights.h5')

3.x

model.save_weights('dropout_weights.weights.h5')

save_weights 에서 .weights.h5 와 같이 저장

 

2.x

checkpoint_cb = keras.callbacks.ModelCheckpoint('best-cnn-model.h5')

3.x

checkpoint_cb = keras.callbacks.ModelCheckpoint('best-cnn-model.keras')

확장자명을 .keras로 변경

 

케라스 모델 생성시

2.x

from tensorflow import keras
model = keras.Sequential()

model.add(keras.layers.Embedding(500, 16),input_length=100)
model.add(keras.layers.LSTM(8))
model.add(keras.layers.Dense(1, activation='sigmoid'))

3.x

from tensorflow import keras
model = keras.Sequential()
model.add(keras.layers.Input(shape=(100,)))
model.add(keras.layers.Embedding(500, 16))
model.add(keras.layers.LSTM(8))
model.add(keras.layers.Dense(1, activation='sigmoid'))

input_length 대신 input layer를 사용해야 됨

 

사업자 정보 표시
원당컴퓨터학원 | 기희경 | 인천 서구 당하동 1028-2 장원프라자 502호 | 사업자 등록번호 : 301-96-83080 | TEL : 032-565-5497 | Mail : icon001@naver.com | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기