Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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 将ImageFeatureColumn与ml.Preprocess+;ml.features.FeatureMetadata.parse_features_Python_Google Cloud Ml - Fatal编程技术网

Python 将ImageFeatureColumn与ml.Preprocess+;ml.features.FeatureMetadata.parse_features

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_集合

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集中包含
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的返回值一致