Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向gRPC发送Keras模型_Python_Tensorflow_Keras_Protocol Buffers_Grpc - Fatal编程技术网

Python 向gRPC发送Keras模型

Python 向gRPC发送Keras模型,python,tensorflow,keras,protocol-buffers,grpc,Python,Tensorflow,Keras,Protocol Buffers,Grpc,我正试图用gRPC实现一个联邦学习系统。 Tensorflow Federated目前支持多机远程学习,但在我看来,它在服务器端准备客户端数据集有些奇怪。我希望客户机的数据集只驻留在客户机的设备中,并且只准备在客户机的设备中,而不是在服务器的内存中 如果我使用Tensorflow已经使用的tensor\u shape.proto、tensor.proto、types.proto、resource\u handle.proto和tensor\u util.make\u tensor\u proto

我正试图用gRPC实现一个联邦学习系统。 Tensorflow Federated目前支持多机远程学习,但在我看来,它在服务器端准备客户端数据集有些奇怪。我希望客户机的数据集只驻留在客户机的设备中,并且只准备在客户机的设备中,而不是在服务器的内存中

如果我使用Tensorflow已经使用的
tensor\u shape.proto、tensor.proto、types.proto、resource\u handle.proto
tensor\u util.make\u tensor\u proto()
,则权重向量等张量可以很好地传递

hist=model.fit(…)
向量=模型可训练变量
发送_张量=[]
对于向量中的v:
tensor=tensor\u util.make\u tensor\u proto(v.numpy(),shape=v.numpy().shape)
发送_张量。追加(张量)
#一些发送逻辑
...
但我找不到任何类型的“model.proto”。 我想像下面一样实现,就像上面一样

#服务器
model=tf.keras.models.Sequential([…])
model.compile(…)
model_proto=某个_包。make_model_proto()
req=my_proto_pb2.请求(model=model_proto)
客户存根。一些grpc服务(req)
#客户
类SomeServicer(…):
定义一些grpc服务(自我、请求、上下文):
model_proto=request.model
model=一些包。model\u来自proto(model\u proto)
model.compile(…)
模型拟合(…)
...
protobuf定义为

消息请求{
ModelProto模型=1;
}
这不是关于
服务
,而是关于通过gRPC将keras模型从服务器传输到客户端。有什么办法吗

如果不可能,我是否应该将其作为从
model.save()
创建的
.h5
文件读取的字节流发送?

关于TFF的简要说明——目前许多示例确实在服务器端实现了数据集,这仅仅是因为FL research first的设计,例如,改进联邦优化算法。TFF目前可以通过简单地使用不同的方法在客户机上具体化数据集来支持此处所需的应用程序类型

由于TF是本地计算引擎,并且TFF支持执行任意TensorFlow,只要您可以基于本地客户端环境在TensorFlow中加载数据集,TFF就可以支持这一点。一个示例可能是在外部Python层中选择一组ID,编写一个TF函数,该函数接受这些ID并从本地客户机环境中具体化数据集,并将此函数映射到这些ID上。这种模式可能看起来像:

@tff.tf_计算(tf.int32)
def物化_客户端上的_数据集_(x):
ds=…#检查本地环境,并像往常一样在TF中加载数据集
返回ds
@联邦计算(
tff.FederatedType(
tff.TensorType(tf.int32,shape=[]),tff.CLIENTS),
…)#这里大概也是模型类型
def系列(ids_和_型号):
ids,model=ids_和_model#只需在此处解包即可
datasets=tff.federated\u映射(具体化\u客户端上的\u数据集,ID)
训练结果=运行训练(数据集、模型)#假设其他地方定义了运行训练
返回列车运行结果
这种模式不会导致数据集在服务器上具体化,只会导致训练的结果