我是Tensorflow的新手,正在尝试将其纳入我的项目。我正在使用带相机的树莓派pi4检测我的喂鸟器的变化,拍摄照片,然后使用张量流识别那只鸟。我正在使用Birds_V1完成此操作。
我很好奇如何解释输入和输出。根据概述,输入为:
预计为尺寸为224 x 224的3通道RGB彩色图像,缩放为[0,1]。
我对缩放为[0,1]的含义感到困惑 此外,输出
image_classifier:尺寸为965的概率向量,对应于标签图中的背景类别和964种鸟类。
我完全迷失了这里的意思。
最后,我运行了解释器.get_input_details()和解释器.get_output_details()看看它会输出什么。
我把它打印回来了,顶部是输入,底部是输出:
[{'name': 'module/hub_input/images_uint8', 'index': 170, 'shape': array([ 1, 224, 224, 3]), 'dtype': <class 'numpy.uint8'>, 'quantization': (0.0078125, 128), 'quantization_parameters': {'scales': array([0.0078125], dtype=float32), 'zero_points': array([128]), 'quantized_dimension': 0}}]
[{'name': 'module/prediction', 'index': 171, 'shape': array([ 1, 965]), 'dtype': <class 'numpy.uint8'>, 'quantization': (0.00390625, 0), 'quantization_parameters': {'scales': array([0.00390625], dtype=float32), 'zero_points': array([0]), 'quantized_dimension': 0}}]
我不知道该怎么解释,并且想知道我是否应该放弃它,或者如果它不重要则忽略它。
我感谢您对此部分的任何澄清,并感谢您认为对解决此问题有用的任何资料。我一直在寻找帮助的人,但还没到任何地方。
答案 0 :(得分:0)
@smile在评论中回答了大多数问题,但在此处(答案部分)提供了澄清,以使社区受益。
问题:我对缩放为[0,1]的含义感到困惑
答案:通常,Images
只是Numpy Array
(在您的形状为224、224、3的情况下),其值范围为0 to 255
。通过将每个像素值除以255,我们Normalize
Pixel Values
使得每个Pixel
的值将在[0,1]
范围内。如果我们不Normalize
Pixel Values
,那么Model
到Converge
所花费的时间将会非常长。
有关规范化的更多信息,请参阅此Stack Overflow Answer和此Stack Exchange Answer。
问题:尺寸为965的probability vector
,对应于标签图中的背景class
和964种鸟类。我完全迷失了这里的意思。
答案:在我们的CNN的最后一层,我们将使用Softmax Activation Function
等于Number of Units
的{{1}}(在您的情况下,值为 965 )。因此,该Number of Classes
中的Output
将导致965 Layer
,所有Probabilities
的总和为1。Probabilities
最高的{{1 }}代表与该Class
相对应的Probability
。
例如在分别对应于Class
个物种的5个物种Image
中。这意味着输入图像被分类为C类(最大值0.6)。 (以@smile的示例为例,因为它已经很好地说明了。)
问题:我不知道如何解释model output = [0.1,0.1,0.6, 0.1, 0.1]
和[A,B,C,D,E]
答案:get_input_details的源代码解释为它返回输入图像张量的所有详细信息的列表。同样,get_output_details的源代码解释说,它返回输出预测张量的所有详细信息的列表。可以在此Tensorflow Documentation中找到有关API解释器的信息。
在代码中,
interpreter.get_input_details
interpreter.get_output_details
表示图中输入张量的[{'name': 'module/hub_input/images_uint8', 'index': 170,
'shape': array([ 1, 224, 224, 3]), 'dtype': <class 'numpy.uint8'>,
'quantization': (0.0078125, 128), 'quantization_parameters': {'scales':
array([0.0078125], dtype=float32), 'zero_points': array([128]),
'quantized_dimension': 0}}]
,Name
表示其Name
。 Shape
的目的是减小shape
的大小,因为Quantization
的{{1}}会更小。可以在此Tensorflow Documentation中找到有关Model
的更多信息。