我通过使用cv2包读取许多图像而创建了一个numpy数组。我以灰度读取图像,因此像素值从0到255,在这种情况下,数据的类型是uint8。这意味着每个数据元素的大小为1个字节。我使用每个图像创建一个列表,然后想要将数组列表转换为数组数组。之后,我需要将这些数据提供给模型,但模型需要图像像素值在1和0之间浮动。现在Python中的每个浮点数为8个字节。所以我尝试使用这个cv2函数转换每个数组
unlabeled_img_array = cv2.normalize(unlabeled_img_array.astype('float'), None, 0.0, 1.0, cv2.NORM_MINMAX)
它可以工作,我可以创建数组列表。当我尝试将数组列表转换为数组数组时出现问题:
unlabeled_img_array_arrays = np.array(unlabeled_img_list_arrays)
然后我得到一个内存错误,显然是因为矩阵太大了。如果我使用数据类型uint8进行,则没有错误。
我的问题是。有没有办法解决这个问题,还是我必须坚持使用uint8而不是浮点值?
编辑:
我也试过用这个
cv2.normalize(unlabeled_img_array.astype(np.float16), None, 0.0, 1.0, cv2.NORM_MINMAX)
但它给了我这个错误
TypeError: src data type = 23 is not supported
有没有办法让数组浮动16?也许这会缩小尺寸。虽然我不确定该模型是否会接受它。
答案 0 :(得分:2)
你可以尝试'float16'而不是'float',这样可以节省3/4的内存。