当前位置: 首页 > 知识库问答 >
问题:

tflite SSD-MobileNet_V2无法设置张量:维度不匹配。得到320,但输入0的维度1应为1

通鸿风
2023-03-14

有谁能这么好心给我一些帮助吗?

作为目标检测的初学者,我试图用tflite做一些实验。我从Tensorflow网站下载了tflite模式ssd_mobilenet_v2_fpn_100/fp32的示例模型

https://tfhub . dev/iree/lite-model/SSD _ mobilenet _ v2 _ fpn _ 100/fp32/default/1

然后我运行我的代码,如下所示

解释tflite.Interpreter(model_path='lite-
model_ssd_mobilenet_v2_fpn_100_fp32_default_1.tflite')
interpreter.allocate_tensors()

input_details=interpreter.get_input_details()output_details=interpreter.get_output_details()img=Image.open('table.jpeg')img=img.resize((320,320))

input_data = (np.浮子32(异地磁) - 127.5) / 127.5 input_data = np.expand_dims(异位磁共振,轴=0).

然后得到一个形状为(1320320,3)的输入张量。然后在向模型馈送时出现问题

interpreter.set_tensor(input_data input_details[0][索引]]

然后我得到了下面的消息

()中的ValueError Traceback(最近的调用

----

set_tensor中的/usr/local/lib/python3.7/dist-packages/tflite_runtime/interpreter.py(自,tensor_index,值)695 ValueError:如果解释器无法设置张量。696 """ --

值错误: 无法设置张量: 维度不匹配。得到 320,但对于输入 0 的维度 1,预期为 1。

所以这意味着输入张量违反了一些规则。

然后我通过以下方式检查输入详细信息

input_details

然后我发现输入数组的形状是为形状(1,1,1,3)定义的

[{'dtype': numpy.float32, “索引”: 0, “名称”: “normalized_input_image_tensor”, “量化”: (0.0, 0),
“quantization_parameters”: {'quantized_dimension': 0, 'scales': 数组([], dtype=float32), 'zero_points': 数组([], dtype=int32)},
'shape': 数组([1, 1, 1, 3], dtype=int32), “shape_signature”: 数组([ 1, -1, -1, 3], dtype=int32), 'sparsity_parameters': {}}]

但是当我在Tensorflow网站上查看模型的描述时

normalized_input_image_tensor:一个uint8形状数组[batch,height,width,channels],其中batch=1,channels=3,高度和宽度可以是任意大小。值应规范化为[-1,1]。

所以基本上对维度1和维度2的形状或输入张量没有要求。

我应该如何解决这个问题?

我尝试了已经为(1,320,320,3)定义的模型。至少它可以正常运行。

非常感谢你的帮助!

当做

悬崖

共有1个答案

尚嘉勋
2023-03-14

由于模型使用可变大小,因此需要使用方法resize_tensensor_input()显式设置输入大小。

 类似资料:
  • 我对此好奇已有一段时间了。我可以忍受,但如果没有足够的注意,它总是会咬我,所以我决定把它贴在这里。假设以下示例(Numpy版本=1.8.2): 我不知道别人怎么想,但我觉得结果不一致。最后一行是列向量,而倒数第二行是行向量,它们应该有不同的维数——在线性代数中它们有!(第5行是另一个惊喜,但我暂时忽略它)。考虑第二个例子: 现在误差的维数为(n,n)。是的,在第二行中我应该使用(n,)而不是(n,

  • 我正在尝试将我的ensorflow模型(2.0)转换为ensorflow lite格式。我的模型有两个输入层,如下所示: 然后,我在层上执行一些张量操作,并将模型保存如下(没有训练,因此没有可训练的参数,只有一些线性代数操作,我想移植到android) 我得到了我的tensorflow.h5模型,因此,当我尝试将其转换为tensorfflow lite时,我得到了以下错误: 我知道,在张量流1.x

  • 我想提供以下形状的神经网络输入:每个训练条目都是一个维度为700x10的2D数组。总共有204个训练条目。标签只是204大小的一维数组(二进制输出) 我试图只使用密集层: 但是我得到了以下错误(与第一层上的input\u形状无关,但在输出验证期间): 204-训练数据量。 堆栈跟踪: 调试Keras代码时发现: 培训前验证失败。它验证输出数组。 根据神经网络的结构,第一个密集层以某种方式产生700

  • 根据keras文件(https://keras.io/layers/convolutional/)Conv1D输出张量的形状为(batch\u size,new\u steps,filters),而输入张量的形状为(batch\u size,steps,input\u dim)。我不明白这是怎么回事,因为这意味着如果你传递一个长度为8000的1d输入,其中batch\u size=1,steps=

  • 在这里,我试图实现一个具有单个隐藏层的神经网络来分类两个训练示例。该网络利用sigmoid激活函数。 各层尺寸和重量如下: 我在反向传播中遇到了一个矩阵维数不正确的问题。此代码: 返回错误: 如何计算上一层的误差? 更新: 返回错误: 是否未正确设置矩阵尺寸?

  • 我培训了一个用于对象检测的定制MobileNetV2 SSD模型。我保存了.pb文件,现在我想将其转换为.tflite文件,以便与Coral edge tpu一起使用。 我在CPU上的Windows 10上使用Tensorflow 2.2。 我使用的代码是: 我尝试了其他线程提出的几个解决方案,也用tf-nightly,tf2.3进行了尝试 因为我是Tensorflow的新手,所以我有几个问题:输