ConvNet开发中如何将整数与np.array图像一同保存?
当然可以用numpy实现你的需求!你遇到的ValueError是因为np.concatenate要求所有输入数组的维度必须完全一致——你的图像是2维数组(474,31),而按键标签是1维数组(1,),维度不匹配才会报错。下面给你几种实用的解决方案,你可以根据自己的需求选择:
方案1:调整标签维度后拼接(适合需要单个数组的场景)
如果必须把图像和标签合并成一个数组,你可以先把1维的标签扩展成和图像同维度的数组,再进行拼接。比如把标签作为额外的一列添加到图像中:
# 将key_pressed扩展为和图像行数一致的2维数组(形状(474,1)) key_pressed_2d = np.full((window.shape[0], 1), key_pressed[0]) # 沿着列方向拼接图像和标签 combined_array = np.concatenate((window, key_pressed_2d), axis=1) print(combined_array.shape) # 输出 (474, 32)
不过这种方式会重复存储标签值,适合某些特定的训练数据格式需求。
方案2:使用numpy结构化数组(推荐存储异构关联数据)
结构化数组允许在同一个数组中存储不同类型、不同形状的数据,完美匹配你的“图像+单个标签”需求,还不会冗余存储:
# 定义结构化数据类型:image字段对应图像的形状和类型,label字段对应标签类型 data_type = [('image', window.dtype, window.shape), ('label', key_pressed.dtype)] # 创建结构化数组 combined_struct = np.array([(window, key_pressed[0])], dtype=data_type) # 保存到文件 np.save('training_data.npy', combined_struct) # 读取示例 loaded_data = np.load('training_data.npy', allow_pickle=True) loaded_image = loaded_data[0]['image'] loaded_label = loaded_data[0]['label'] print(loaded_image.shape, loaded_label) # 输出 (474,31) 1或0
方案3:用np.savez分开保存(最灵活的深度学习常用方式)
如果不需要把数据合并成单个数组,np.savez可以把图像和标签打包成一个压缩文件,读取时能单独提取每个数据,这也是深度学习项目中最常用的方式:
# 保存图像和标签到同一个.npz压缩文件 np.savez('convnet_samples.npz', image=window, label=key_pressed) # 读取文件 saved_data = np.load('convnet_samples.npz') loaded_image = saved_data['image'] loaded_label = saved_data['label'] print(loaded_image.shape, loaded_label.shape) # 输出 (474,31) (1,)
这种方式不仅灵活,还能节省存储空间,非常推荐你优先尝试!
内容的提问来源于stack exchange,提问作者Setti
相关产品推荐
相关产品推荐

