在一行代码中使用任何tensorflow模型
tfi的Python项目详细描述
tfi为任何tensorflow模型提供了一个简单的python接口。它通过动态自动生成一个python类来实现这一点。
下面是对基于Inception v1的savedModel使用tfi的示例。这个特定的savedModel有一个predict方法和一个SignatureDef方法,看起来像:predict(images float <1,224,224,3>) -> (categories string <1001>, scores float <1,1001>)
TFI在起作用
>>> importtfi>>> InceptionV1=tfi.saved_model.as_class("./inception-v1.saved_model")
传入数据
tfi可以自动将您提供的任何数据调整为图形所需的形状。让我们随机拍一张我在网上找到的狗的照片…
>>> model=InceptionV1()>>> image=tfi.data.file("./dog-medium-landing-hero.jpg")>>> result=model.predict(images=[image])>>> categories,scores=result.categories,result.scores[0]
如果我们打印前5个概率,我们会看到:
>>> [(scores[i],categories[i].decode('utf-8'))foriinscores.argsort()[:-5:-1]][(0.80796158, 'bloodhound, sleuthhound'), (0.10305813, 'English foxhound'), (0.064740285, 'redbone'), (0.009166114, 'beagle')]
不错!
图像数据
tf.data.file函数使用mimetypes来发现要使用的正确数据解码器。如果图形的输入是"image/*",tfi将自动解码并将图像大小调整为适当的大小。在上面的例子中,狗的jpeg图像被自动解码并调整大小为224x224。
批次
如果仔细查看上面的示例代码,您将看到images参数实际上是一个数组。由tfi生成的类足够聪明,可以将图像数组转换为大小适当的一批张量。
带变量的图
类的每个实例都有独立于其他实例的变量。如果一个图的变量在会话期间以一种有用的方式发生了变异,那么您可以通过在同一个实例上再次调用方法来继续使用这些变异。
如果希望有多个彼此不干扰的实例,可以创建第二个实例并分别对每个实例调用方法。
tfi和savedModels
tfi使用savedModel的signatureDefs中的信息在生成的类上生成方法。每个方法的关键字参数名称也从signaturedef的信息中提取。
示例中使用的savedModel是使用tf.estimator.Estimator#export_savedmodel函数创建的。
开始
TFI is on PyPI,用pip install tfi安装。
未来工作
调整tfi.data函数来处理队列和数据集不需要太多的工作。如果这是您希望我做的事情,请使用您的特定用例file an issue!
扩展tfi.data来支持更多格式也非常简单。File an issue使用您希望看到的特定格式。对于加分,包括预期的张量类型和形状。要获得双倍的加分,请提供一种在真实模型中测试的方法。
现在创建格式良好的savedModel并不容易。如果这是你希望tfi在未来做的事情……file an issue。;)