url:https://blog.csdn.net/leozwang/article/details/79392628
保护模型文件不易于复制
默认情况下,您的模型将以磁盘上的标准序列化probuf格式存储。理论上这意味着任何人都可以复制你的模型,所以我经常被问及如何防止这种情况。在实践中,大多数模型都是特定于应用程序的,并且通过优化来混淆,风险类似于拆解和重新使用代码的竞争对手的风险。如果你想让临时用户更难访问你的文件,可以采取一些基本的步骤。 我们的大多数示例使用ReadBinaryProto便捷调用来从磁盘加载GraphDef。这一步需要磁盘上的未加密的protobuf。幸运的是,调用的实现非常简单,编写一个可以在内存中解密的等价物是很容易的。以下是一些代码,展示了如何使用自己的解密过程来读取和解密protobuf: ``` Status ReadEncryptedProto(Env* env, const string& fname, ::tensorflow::protobuf::MessageLite* proto) { string data; TFRETURNIF_ERROR(ReadFileToString(env, fname, &data)); DecryptData(&data); // Your own function here.
if (!proto->ParseFromString(&data)) { TFRETURNIF_ERROR(stream->status()); return errors::DataLoss("Can't parse ", fname, " as binary proto"); } return Status::OK(); } ```
void DecryptData(string * data){ for(int i = 0; i <data.size(); ++ i){ data [i] = data [i] ^ 0x23; } }
你可能想设计更复杂的算法,但这个不在我们的讨论之内。