Python 将ImageFeatureColumn与ml.Preprocess+;ml.features.FeatureMetadata.parse_features
Google Cloud ML明确表示,我可以通过以下步骤为Tensorflow模型创建输入张量:Python 将ImageFeatureColumn与ml.Preprocess+;ml.features.FeatureMetadata.parse_features,python,google-cloud-ml,Python,Google Cloud Ml,Google Cloud ML明确表示,我可以通过以下步骤为Tensorflow模型创建输入张量: 创建feature\u set=将功能名称映射到ml.features.FeatureColumn对象的dict 将feature\u set传递到ml.Preprocess以生成元数据对象 调用ml.features.FeatureMetadata.parse_features,它使用该元数据对象创建一个张量,该张量将表示tf.Example-编码的训练示例的张量转换为表示feature_集合
- 创建
=将功能名称映射到feature\u set
对象的dictml.features.FeatureColumn
- 将
传递到feature\u set
以生成元数据对象ml.Preprocess
- 调用
,它使用该元数据对象创建一个张量,该张量将表示ml.features.FeatureMetadata.parse_features
-编码的训练示例的张量转换为表示tf.Example
中的特征的张量feature_集合
feature\u集中包含ml.features.imagefeature列时,这对我不起作用。特别是,FeatureMetadata.parse_features
为“我的图像”功能生成了一个形状错误的张量。根据ImageFeatureColumn.transform
的返回值定义,图像特征由标量JPEG编码字符串组成,这表明相应的张量应为(批量大小,1)
。但是,FeatureMetadata.parse\u features
给了我一个形状的张量(BATCH\u SIZE,ImageFeatureColumn.feature\u SIZE>1)
这使得我无法在该张量上调用tf.image.decode\u jpeg
。无论我用什么柔道来试着让功能发挥作用,我都会遇到以下错误:
ValueError:无法将包含524288个元素的张量重塑为shape()(1个元素)
当我将ImageFeatureColumn.feature\u size
(或基于此值生成的元数据)更改为1时,此错误消失
您可以运行以下脚本以查看此错误:
(不带参数运行脚本以查看错误。带参数运行脚本以查看我在脚本中所做的修复是否有效。)
这是虫子吗
顺便说一句,这是0.1.7-alpha版的google.cloud.ml
Tensorflow没有图像数据类型,因此图像的Tensor返回值的大小不是1,而是图像中所有字节的大小
Tensorflow在使用固定长度的张量时效果最好,但设置大小的JPEG可能具有不同的二进制长度。为了解决这个问题,JPEG返回的张量的特征大小被设置为(图像宽度)*(图像高度)*8字节/像素,以确保它足够大以容纳图像。您将target_size设置为(256,256),因此图像大小将调整为该大小,并且(每像素8字节)x 256 x 256=524288字节
这些张量应该能够被发送到解码jpeg
如果有帮助,请告诉我。FYI,要使pastebin脚本中的代码正常工作,您需要在cwd中使用文件名为“image.jpg”的图像。任何图片都可以。同意前两段。但问题是解码jpeg在256*256*8形状的张量上不起作用。事实上,文档中指出只有0-D字符串张量可以:这就是为什么我认为ImageFeatureColumn应该创建一个dtype=string,shape=(1,)张量,该张量可以调整为标量张量。这也将使张量形状与ImageFeatureColumn.transform的返回值一致