python - 从路径加载大量图像并将其转换为大小为 (n,224,224,3) 的数组
问题描述
我目前正在加载图像,从中创建一个数组并将其附加到一个列表中。可悲的是,对于我要加载的图像数量(20k),这似乎耗尽了我所有的 RAM。
代码:
def convert_image_to_array(files,relpath):
images_as_array=[]
len_files = len(files)
i = 0
print("---ConvImg2Arr---")
print("---STARTING---")
for file in files:
images_as_array.append(img_to_array(load_img(relpath+file, target_size=(soll_img_shape, soll_img_shape)))/255)
if i == int(len_files*0.2):
print("20% done")
if i == int(len_files*0.5):
print("50% done")
if i == int(len_files*0.8):
print("80% done")
i +=1
print("---DONE---")
return images_as_array
使用来自 train_test_split 的 X_train 调用它:
x_train = convert_image_to_array_opt(X_train,rel_path)
加载所有这些图像的更有效方法是什么?
编辑:
使用 Keras 的 .flow_from_directory() 解决了我的问题,但我仍然想知道如何按照我尝试的方式完成。
解决方案
假设该方法load_img
不是瓶颈,convert_image_to_array_opt
将所有图像(20k)加载到内存中。但是,flow_from_directory
方法一次只加载一个图像池(典型的批量大小为 32、64、... 1024)
重新设计的一种可能方法是convert_image_to_array_opt
将批量大小作为参数并加载和仅yield
加载bath_size
图像(连同标签)的 numpy 数组。并且在训练时枚举convert_image_to_array_opt
返回 batch_size X 和 y 的方法,您可以在这些方法上进行训练。
推荐阅读
- java - 通过远程 JVM 在 Intellij IDEA 中进行 Maven 调试不会通过 Step Over/Into btns 遍历代码
- sorting - 苏禄智能字段类型排序顺序?
- react-native - React-Native:文本在不同手机中呈现不同
- kubernetes - GKE 单 ip 负载平衡器重叠端口
- python - 为什么在使用 pymysql 时必须重新连接数据库才能获取更新的数据库数据?
- python - 在 Api URL 中如何在 Django 中增加页码
- javascript - 使用节点 js 过滤对象键和值
- javascript - bootstrap 4手风琴在角度项目中动态加载
- google-cloud-platform - 使用 DataflowTempleOperator 的 Composer Dataflow 作业错误
- r - 从 Rstudio 连接到 SQL 数据库时出错