修复numpy图像转tensor时Argument must be a dense tensor报错
错误原因
用[img]包裹numpy数组时,你得到的是一个Python列表,列表里唯一的元素是那个形状为(128,128,3)的numpy数组。TensorFlow不会自动把列表里的numpy数组展开拼接成高维张量,只会把这个列表识别为长度为1的一维结构,自然和你预期的4维张量形状冲突,就会抛出看到的形状报错。
修正方案
- 方案1:直接转张量后手动扩维,不需要额外套方括号
img = cv2.imread(r'source_img.jpg') # 先转成形状为(128, 128, 3)的张量 img_tensor = tf.constant(img, dtype=tf.uint8) # 在第0位增加batch维度,得到你需要的(1, 128, 128, 3)形状张量 img_tensor_with_batch = tf.expand_dims(img_tensor, axis=0)
- 方案2:先给numpy数组扩维,再直接转张量
import numpy as np # 先用numpy给数组扩维,得到形状(1,128,128,3)的numpy数组 img_with_batch = np.expand_dims(img, axis=0) # 直接传入转换即可,不会触发结构解析错误 img_tensor = tf.constant(img_with_batch, dtype=tf.uint8)
补充提示:cv2读取的图像默认是BGR通道顺序,如果后续要对接按RGB通道训练的模型,需要提前用cv2.cvtColor(img, cv2.COLOR_BGR2RGB)转换通道顺序,避免颜色错乱。
内容的提问来源于stack exchange,提问作者godzillabeast
相关产品推荐
相关产品推荐

