【问题标题】:How can I convert R4 to U1 in a ML.Net Pipeline?如何在 ML.Net 管道中将 R4 转换为 U1?
【发布时间】:2018-12-07 18:14:08
【问题描述】:

我有这个代码:

Dim pipeline = ImageEstimatorsCatalog.LoadImages(mlContext.Transforms, 
imagesFolder, ("ImagePath", "ImageReal")).
        Append(ImageEstimatorsCatalog.Resize(mlContext.Transforms, "ImageReal", "ImageReal", ImageNetSettings.imageHeight, ImageNetSettings.imageWidth, resizing:=ImageResizerTransform.ResizingKind.IsoPad)).
        Append(ImageEstimatorsCatalog.ExtractPixels(mlContext.Transforms, {New ImagePixelExtractorTransform.ColumnInfo("ImageReal", "image_tensor",
                                 colors:=ImagePixelExtractorTransform.ColorBits.Rgb, interleave:=ImageNetSettings.channelsLast,
                                 offset:=ImageNetSettings.mean, scale:=ImageNetSettings.scale)})).
        Append(New TensorFlowEstimator(mlContext, modelLocation, {"image_tensor"}, {"detection_scores", "detection_boxes", "detection_classes", "num_detections"}))

Dim modeld = pipeline.Fit(data)

当我编译它时,我得到以下错误:

Schema mismatch for input column 'image_tensor': expected U1, got R4
Parameter name: inputSchema

因为我使用的模型的输入节点是 Uinteger,而 ImageEstimatorsCatalog.ExtractPixels 生成的默认矢量 Image 是浮点数。

我尝试使用以下方法进行转换:

Append(ConversionsExtensionsCatalog.ConvertType(mlContext.Transforms.Conversion,
"image_tensor", "image_tensor", DataKind.U1))

但它不起作用。

关于如何在管道中将浮点数转换为 Uinteger 的任何想法?

谢谢

【问题讨论】:

  • 哇,我没有意识到VB.NET没有扩展方法,所以你的管道组合很丑。
  • @Zruty VB 确实有扩展方法,它们的工作方式与 C# 中的扩展方法大致相同,唯一显着的区别是您使用 <Extension> 属性来创建它们,并且第一个参数是隐式的this 来自 C# 扩展方法的参数。

标签: vb.net tensorflow ml.net


【解决方案1】:

如果从浮点到字节的标准转换(通过ConvertType)不起作用,我唯一可以推荐的是使用自定义映射。

Here 是一段代码,用于演示 ML.NET 中的自定义映射。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多