Julia中如何为FluxML MLP定义指定类型的图像数组?
解决Julia中初始化
Array{Array{Gray{Normed{UInt8,8}},2},1}类型数组的问题 首先咱们来拆解你遇到的报错原因:你尝试用Array{Array{ColorTypes.Gray{FixedPointNumbers.Normed{UInt8,8}},2}}(10)初始化数组,但Julia的数组构造函数不支持直接传入单个整数来创建这种嵌套数组——报错信息里也明确提示了,必须搭配UndefInitializer(也就是undef)来指定未初始化的内存空间。
下面给你几种适配不同需求的正确初始化方式:
1. 创建未初始化的嵌套数组
如果你只是需要一个长度为10、元素类型为Array{Gray{N0f8},2}的空架子数组(每个元素暂时未赋值),可以用undef初始化器:
# 先导入必要的包 using ColorTypes, FixedPointNumbers # 简化类型写法:Gray{Normed{UInt8,8}} 等价于 Gray{N0f8} x = Array{Array{Gray{N0f8},2},1}(undef, 10)
执行后会得到一个长度为10的数组,每个位置是未初始化的Array{Gray{N0f8},2}对象,之后你可以逐个给元素赋值,比如x[1] = Gray.(rand(28,28))。
2. 创建每个元素都是指定尺寸的空灰度图像数组
如果你的图像都是固定尺寸(比如和MNIST一样是28x28),用列表推导式直接生成每个元素会更直观:
using ColorTypes, FixedPointNumbers # 生成10个28x28的未初始化灰度图像数组 imgs = [Array{Gray{N0f8},2}(undef, 28, 28) for _ in 1:10]
这种方式生成的数组,每个元素都是独立的2D灰度数组,完全符合你需要的类型结构。
3. 从本地图像集加载并生成目标数组
这应该是你最终的核心需求:替换MNIST数据集为自己的图像。可以借助Images包加载图像并转成灰度格式:
# 导入所需包 using Images, ColorTypes, FixedPointNumbers # 假设你有10张图像的路径列表 image_paths = ["path/to/img1.jpg", "path/to/img2.png", ..., "path/to/img10.png"] # 遍历路径加载图像,转成灰度格式后存入数组 imgs = [Gray.(load(path)) for path in image_paths]
执行完成后,imgs就是类型为Array{Array{Gray{N0f8},2},1}的数组,和MNIST数据集的imgs结构完全一致,可以直接替换到你复用的MLP代码中使用。
内容的提问来源于stack exchange,提问作者Timothée HENRY
相关产品推荐
相关产品推荐

