Python Tensorflow预训练模型输入通道范围

Python Tensorflow预训练模型输入通道范围,python,tensorflow,keras,Python,Tensorflow,Keras,我遇到了这个,它实现了一个预训练模型。它说: 格式化数据 使用tf.image模块格式化任务的图像 将图像调整为固定的输入大小,然后重新缩放输入 信道范围为[-1,1] 我想知道这件事。我的理解是,image=tf.image.resize(image,(IMG\u SIZE,IMG\u SIZE))将图像(可以有任何大小)调整为一个一致的大小。我知道image=(image/127.5)-1不会更改图像的实际大小,但会将值(像素)(介于0到255之间)更改为[-1,1]的范围。在其他示例中,我

我遇到了这个,它实现了一个预训练模型。它说:

格式化数据

使用tf.image模块格式化任务的图像

将图像调整为固定的输入大小,然后重新缩放输入 信道范围为[-1,1]

我想知道这件事。我的理解是,
image=tf.image.resize(image,(IMG\u SIZE,IMG\u SIZE))
将图像(可以有任何大小)调整为一个一致的大小。我知道
image=(image/127.5)-1
不会更改图像的实际大小,但会将值(像素)(介于0到255之间)更改为[-1,1]的范围。在其他示例中,我看到标准化/标准化在[0,1]的范围内进行,因此按1.0/255重新缩放。我不明白什么时候我要用哪个。如果我使用自己的模型,是否缩放到[-1,1]或[0,1]范围取决于我自己?然而,当我使用预训练模型时,我需要知道需要什么。我在谷歌上搜索了mobilenetv2模型,但找不到任何文档告诉我所需的输入通道是[-1,1]。在本文中,它表示所有预训练的张量流模型都要求输入通道为[-1,1]。这是真的吗?特别是,中的所有模型(如果关于图像)都需要[-1,1]的范围,这是真的吗

最后,如何确定预训练模型所需的范围?如果是MobileNetv2,我自己也不会计算出[-1,1]。在页面上我找不到这个信息


此外:是否有一种基本上自动完成的方法?所以我使用一个函数,它会自动检查预训练的tensorflow数据集(它有一个存储该信息的对象)并应用它(假设0-255是我的输入)?我想是在做别的事情(我真的不明白它是做什么的)?这也仅适用于MobileNet v2。

一般来说,您关心的是“我应该在[0,1]、-1,1]之间选择什么比例?”因为答案可能因情况而异,我想在下面指出

  • CNN架构在短的闭合范围输入值中工作得更好。因此,[0,1]和[-1,1]可能都是一个不错的选择。但是,根据体系结构的不同,选择可能会有所不同。因此,尝试各种规模将是一个不错的选择

  • 关于Keras的预训练模型,我注意到大多数使用残差的模型(例如,
    ResNets
    MobileNetV2
    InceptionResNetV2
    )使用[-1,1]比例。在残差中使用[-1,1]比例,在某些情况下会导致某些边被禁用。为了进一步理解,让我们考虑感知器<代码> y= Wx+b。如果
    w=1
    b=1
    则使用输入
    x=1
    结果
    y=0
    。这表明,使用[-1,1]刻度,一些输入值可以通过偏差为零(无需设置
    w=0
    )。对于其他车型(不包括KERA),这一概念也基本正确

  • 几乎所有的Keras体系结构都使用缩放技术。我相信在某些情况下,他们没有按照原始文件的指示执行建议的操作。因此,我认为您应该坚持使用Keras的文档,以防使用他们预先训练过的模型。如果在他们的文档中找不到任何缩放,则应避免缩放


  • 此外,在使用不同的数据集时,应该尝试测试不同的缩放方法。然而,在大多数情况下,这不应大大提高模型的准确性。如果您有更多疑问,请告诉我。谢谢。

    一般来说,您关心的是“我应该在[0,1]、-1,1]之间选择什么比例?”因为答案可能因情况而异,我想在下面指出

  • CNN架构在短的闭合范围输入值中工作得更好。因此,[0,1]和[-1,1]可能都是一个不错的选择。但是,根据体系结构的不同,选择可能会有所不同。因此,尝试各种规模将是一个不错的选择

  • 关于Keras的预训练模型,我注意到大多数使用残差的模型(例如,
    ResNets
    MobileNetV2
    InceptionResNetV2
    )使用[-1,1]比例。在残差中使用[-1,1]比例,在某些情况下会导致某些边被禁用。为了进一步理解,让我们考虑感知器<代码> y= Wx+b。如果
    w=1
    b=1
    则使用输入
    x=1
    结果
    y=0
    。这表明,使用[-1,1]刻度,一些输入值可以通过偏差为零(无需设置
    w=0
    )。对于其他车型(不包括KERA),这一概念也基本正确

  • 几乎所有的Keras体系结构都使用缩放技术。我相信在某些情况下,他们没有按照原始文件的指示执行建议的操作。因此,我认为您应该坚持使用Keras的文档,以防使用他们预先训练过的模型。如果在他们的文档中找不到任何缩放,则应避免缩放


  • 此外,在使用不同的数据集时,应该尝试测试不同的缩放方法。然而,在大多数情况下,这不应大大提高模型的准确性。如果您有更多疑问,请告诉我。谢谢。

    @Quwsair Ohi谢谢你的帖子,但这对我来说并不是什么新鲜事。正如我所说的,我知道我可以缩放0,1或-1,1,这取决于我的具体解决方案,而且我也知道为什么我们通常会缩放/标准化。然而,我不知道什么时候在预训练模型中使用它。问题是我在哪里可以找到MobileNetv2使用-1,1而不是0,1的文档中的信息。此外,我的问题是,tensorflow hub中其他预训练模型的说明在哪里,以及在应用它们之前我如何知道
    IMG_SIZE = 160 # All images will be resized to 160x160
    
    def format_example(image, label):
      image = tf.cast(image, tf.float32)
      image = (image/127.5) - 1
      image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))
      return image, label