내 목표는 .hdf5 파일 (Keras 모델)에서 기본 모델을로드하고 연합 학습으로 계속 교육하는 것입니다. FL에 대한 기본 모델을 초기화하는 방법은 다음과 같습니다.
def model_fn():
model = tf.keras.load_model(path/to/model.hdf5)
return tff.learning.from_keras_model(model=model,
dummy_batch=db,
loss=loss,
metrics=metrics)
trainer = tff.learning.build_federated_averaging_process(model_fn)
state = trainer.initialize()
그러나 결과 state.model 가중치가 무작위로 초기화되고 저장된 모델과 다른 것 같습니다. 연합 훈련 전에도 모델의 성능을 평가하면 무작위로 초기화 된 모델 (50 % 정확도)로 수행됩니다. 성능을 평가하는 방법은 다음과 같습니다.
def evaluate(state):
keras_model = tf.keras.models.load_model(path/to/model.hdf5, compile=False)
tff.learning.assign_weights_to_keras_model(keras_model, state.model)
keras_model.compile(loss=loss, metrics=metrics)
return keras_model.evaluate(features, values)
저장된 모델 가중치로 tff 모델을 어떻게 초기화 할 수 있습니까?
예, initialize
이니셜 라이저를 다시 실행하고이 값을 반환 할 것으로 예상 됩니다.
그러나 TFF로 이러한 작업을 수행하는 방법이 있습니다. TFF는 강력한 유형이며 기능적입니다. 위의 연합 평균화 프로세스에서 예상하는 유형과 일치하는 올바른 값으로 인수를 구성 할 수 있다면 모든 것이 "작동"해야합니다. 따라서 여기서 목표는 이러한 요구 사항을 충족하는 주장 을 구성 하는 것 입니다.
여기에서 약간의 영감을 얻기 위해 FileCheckpointManager's
로드 구현 을 살펴볼 수 있지만 Keras를 사용하면 더 간단한 경우에 해당한다고 생각합니다.
state
위와 같이 손을 잡고 model
Keras 모델을 사용 한다고 가정하면 TFF 자습서 중 하나 의이 섹션 에 표시된대로 여기에 모든 것을 풀고 다시 포장하는 지름길 이tff.learning.state_with_new_model_weights
있습니다. 위와 같은 상태 및 모델이 있고 TF가 eager 모드 인 경우 다음이 작동합니다.
state = tff.learning.state_with_new_model_weights(
state,
trainable_weights=[v.numpy() for v in model.trainable_weights],
non_trainable_weights=[
v.numpy() for v in model.non_trainable_weights
])
이렇게하면 모델의 가중치가 state
개체 의 적절한 요소에 다시 할당 됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다