Tensorflow 如何将权重从基线模型转移到联邦模型?

Tensorflow 如何将权重从基线模型转移到联邦模型?,tensorflow,tensorflow-federated,federated-learning,Tensorflow,Tensorflow Federated,Federated Learning,在Colab中尝试过类似的东西,但我得到错误21,是一个目录 然后我尝试了另一种方法,如下所示 def create_keras_model(): model = Sequential([ Conv2D(16, 3, padding='same', activation='relu'), MaxPooling2D(), Conv2D(32, 3, padding='same', activation='relu'), MaxPooling2D(), Con

在Colab中尝试过类似的东西,但我得到错误21,是一个目录

然后我尝试了另一种方法,如下所示

def create_keras_model():
model = Sequential([
    Conv2D(16, 3, padding='same', activation='relu'),
    MaxPooling2D(),
    Conv2D(32, 3, padding='same', activation='relu'),
    MaxPooling2D(),
    Conv2D(64, 3, padding='same', activation='relu'),
    MaxPooling2D(),
    Flatten(),
    Dense(512, activation='relu', kernel_regularizer=tf.keras.regularizers.l2(0.001)),
    Dropout(0.5),
    Dense(1, activation='sigmoid')
])

model.load_weights('/content/drive/My Drive/localmodel/weights')
return model
就像给keras模型分配权重一样,我想把权重从keras模型转移到tff模型。如何做到这一点?

此处带有权重的模型必须是表示模型权重的TFF值,例如:

tff_model = create_keras_model() #now this function doesnt load weights, just returns a Sequential model   
tff.learning.assign_weights_to_keras_model(tff_model, model_with_weights)
此处,带有权重的模型必须是表示模型权重的TFF值,例如:

tff_model = create_keras_model() #now this function doesnt load weights, just returns a Sequential model   
tff.learning.assign_weights_to_keras_model(tff_model, model_with_weights)

我只是想知道怎么做。 其想法是使用:

def model_fn():

    keras_model = create_keras_model()

  return tff.learning.from_keras_model(keras_model)

fed_avg = tff.learning.build_federated_averaging_process(model_fn, ...)
state = fed_avg.initialize()
state = fed_avg.next(state, ...)
...
tff.learning.assign_weights_to_keras_model(keras_model, state.model)
其中,可训练权重取自基线模型,并转换为numpy格式

tff.learning.state_with_new_model_weights(state, trainable_weights_numpy, non_trainable_weights_numpy)

当服务器拥有部分数据而客户端拥有类似数据时,这一点特别有用。可能这可以用于迁移学习。

我刚刚知道如何做到这一点。 其想法是使用:

def model_fn():

    keras_model = create_keras_model()

  return tff.learning.from_keras_model(keras_model)

fed_avg = tff.learning.build_federated_averaging_process(model_fn, ...)
state = fed_avg.initialize()
state = fed_avg.next(state, ...)
...
tff.learning.assign_weights_to_keras_model(keras_model, state.model)
其中,可训练权重取自基线模型,并转换为numpy格式

tff.learning.state_with_new_model_weights(state, trainable_weights_numpy, non_trainable_weights_numpy)

当服务器拥有部分数据而客户端拥有类似数据时,这一点特别有用。可能这可用于转移学习。

谢谢@Ayness。但是,我想将权重从基线模型分配到tff模型,而不是相反。假设我的基线模型的准确率为70%。我希望我的tff模型从那里开始训练。知道怎么做吗?谢谢@Ayness。但是,我想将权重从基线模型分配到tff模型,而不是相反。假设我的基线模型的准确率为70%。我希望我的tff模型从那里开始训练。知道如何调用吗?Re:errno 21:model.load\u weights正在调用,它似乎指向的路径不是由配对生成的?不知道。我确信这是正确的路径。这个错误来自TF核心内部的Keras库,与TFF无关。可以问一个关于tensorflow标签中这个错误的问题。好的,我明白了。是的,我已经标记了tf。让我们期待吧!Re:errno 21:model.load\u weights正在调用,它似乎指向的路径不是由配对生成的?不是真的。我确信这是正确的路径。这个错误来自TF核心内部的Keras库,与TFF无关。可以问一个关于tensorflow标签中这个错误的问题。好的,我明白了。是的,我已经标记了tf。让我们期待吧!早就应该注意到这一点,请参阅,指向相同的解决方案。谢谢参考。只是看了一眼。但愿我早一点看它。应该早一点看到它。请参阅,指向相同的解决方案。谢谢参考。只是看了一眼。要是我早点看就好了。