Keras¶
Snowflake ML Model Registry는 Keras 3 모델(Keras 버전 3.0.0 이상의 keras.Model)을 지원합니다. Keras 3은 TensorFlow, PyTorch 및 JAX를 백엔드로 지원하는 다중 백엔드 프레임워크입니다.
참고
Keras 버전의 경우 < 3.0.0, use the TensorFlow 처리기를 사용합니다.
log_model 을 호출할 때 options 사전에서 다음 추가 옵션을 사용할 수 있습니다.
옵션 |
설명 |
|---|---|
|
모델 오브젝트에서 사용할 수 있는 메서드 이름 목록입니다. Keras 모델에는 기본 대상 메서드로 ``predict``가 있습니다. |
|
GPU로 플랫폼에 배포할 때 사용할 CUDA 런타임 버전으로 기본값은 11.8입니다. 수동으로 |
레지스트리가 대상 메서드의 서명을 알도록 Keras 모델을 기록할 때 sample_input_data 또는 signatures 매개 변수를 지정해야 합니다.
참고
Keras 모델에는 대상 메서드가 하나만 있을 수 있습니다.
예¶
이러한 예제에서는 ``reg``가 ``snowflake.ml.registry.Registry``의 인스턴스라고 가정합니다.
순차 모델¶
다음 예제에서는 Keras 3 순차 모델을 학습시켜 Snowflake ML Model Registry에 기록하고 추론을 실행하는 방법을 보여줍니다.
import keras
from sklearn import datasets, model_selection
# Load dataset
iris = datasets.load_iris(as_frame=True)
X = iris.data
y = iris.target
# Rename columns for valid Snowflake identifiers
X.columns = [col.replace(' ', '_').replace('(', '').replace(')', '') for col in X.columns]
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.2)
# Build Keras sequential model
model = keras.Sequential([
keras.layers.Dense(64, activation='relu'),
keras.layers.Dense(32, activation='relu'),
keras.layers.Dense(3, activation='softmax')
])
model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy']
)
# Train the model
model.fit(X_train, y_train, epochs=50, verbose=0)
# Log the model
model_ref = reg.log_model(
model=model,
model_name="my_keras_classifier",
version_name="v1",
sample_input_data=X_test,
)
# Make predictions
result_df = model_ref.run(X_test[-10:], function_name="predict")
Functional API 모델¶
다음 예제에서는 Keras Functional API를 사용하여 모델을 만드는 방법을 보여줍니다.
import keras
import numpy as np
import pandas as pd
# Create sample data
n_samples, n_features = 100, 10
X = pd.DataFrame(
np.random.rand(n_samples, n_features),
columns=[f"feature_{i}" for i in range(n_features)]
)
y = np.random.randint(0, 2, n_samples).astype(np.float32)
# Build model using Functional API
inputs = keras.Input(shape=(n_features,))
x = keras.layers.Dense(32, activation='relu')(inputs)
x = keras.layers.Dense(16, activation='relu')(x)
outputs = keras.layers.Dense(1, activation='sigmoid')(x)
model = keras.Model(inputs=inputs, outputs=outputs)
model.compile(
optimizer=keras.optimizers.SGD(learning_rate=0.01),
loss=keras.losses.MeanSquaredError()
)
# Train the model
model.fit(X, y, epochs=10, verbose=0)
# Log the model
model_ref = reg.log_model(
model=model,
model_name="my_functional_model",
version_name="v1",
sample_input_data=X,
)
# Make predictions
result_df = model_ref.run(X[-10:], function_name="predict")
사용자 지정 하위 클래스 모델¶
다음 예제에서는 ``keras.Model``을 서브클래싱하여 사용자 지정 모델을 만드는 방법을 보여줍니다.
import keras
import numpy as np
import pandas as pd
# Define custom model with serialization support
@keras.saving.register_keras_serializable()
class BinaryClassifier(keras.Model):
def __init__(self, hidden_units: int, output_units: int) -> None:
super().__init__()
self.dense1 = keras.layers.Dense(hidden_units, activation="relu")
self.dense2 = keras.layers.Dense(output_units, activation="sigmoid")
def call(self, inputs):
x = self.dense1(inputs)
return self.dense2(x)
def get_config(self):
base_config = super().get_config()
config = {
"dense1": keras.saving.serialize_keras_object(self.dense1),
"dense2": keras.saving.serialize_keras_object(self.dense2),
}
return {**base_config, **config}
@classmethod
def from_config(cls, config):
dense1_config = config.pop("dense1")
dense1 = keras.saving.deserialize_keras_object(dense1_config)
dense2_config = config.pop("dense2")
dense2 = keras.saving.deserialize_keras_object(dense2_config)
obj = cls(1, 1)
obj.dense1 = dense1
obj.dense2 = dense2
return obj
# Create sample data
n_samples, n_features = 100, 10
X = pd.DataFrame(
np.random.rand(n_samples, n_features),
columns=[f"feature_{i}" for i in range(n_features)]
)
y = np.random.randint(0, 2, n_samples).astype(np.float32)
# Create and train model
model = BinaryClassifier(hidden_units=32, output_units=1)
model.compile(
optimizer=keras.optimizers.SGD(learning_rate=0.01),
loss=keras.losses.MeanSquaredError()
)
model.fit(X, y, epochs=10, verbose=0)
# Log the model
model_ref = reg.log_model(
model=model,
model_name="my_custom_classifier",
version_name="v1",
sample_input_data=X,
)
# Make predictions
result_df = model_ref.run(X[-10:], function_name="predict")