python - Keras Python 多图像输入形状错误

标签 python machine-learning neural-network keras conv-neural-network

我正在尝试自学构建一个将多个图像作为输入的 CNN。由于我创建的用于测试此数据集很大,并且从长远来看,我希望解决涉及非常大数据集的问题,因此我使用生成器将图像读入数组,并将其传递给 Keras 模型的 fit_generator函数。

当我单独运行生成器时,它工作正常,并产生适当形状的输出。它生成一个包含两个条目的元组,第一个条目的形状为 (4, 100, 100, 1),第二个条目的形状为 (4, )

阅读有关多输入 Keras CNN 的内容给我的印象是,这是 4 输入 CNN 生成器的正确格式,该生成器可识别 4 个输入中哪一个包含图像。

但是,当我运行代码时,我得到:

"ValueError: Error when checking input: expected input_121 to have 4 dimensions, but got array with shape (100, 100, 1)"

我已经寻找解决方案有一段时间了,我怀疑问题在于将我的 (100, 100, 1) 形状数组作为 发送到输入>(None, 100, 100, 1) 形状数组。

但是当我尝试修改生成器的输出时,我收到一个关于维度 5 的错误,这是一个错误,因为生成器的输出应具有 X 的形式, y = [X1, X2, X3, X4], [a, b, c, d],其中 Xn 的形状为 (100, 100, 1) code> 和 a/b/c/d 是数字。

这是代码:

https://gist.github.com/anonymous/d283494aee982fbc30f3b52f2a6f422c

提前致谢!

最佳答案

您正在生成器中创建尺寸错误的数组列表。

如果您想要正确的形状,请重新调整单个图像的形状,使其具有 4 个维度:(n_samplesx_sizey_size n_bands)你的模型将会工作。在您的情况下,您应该将图像 reshape 为 (1, 100, 100, 1)

最后用np.vstack将它们堆叠起来。生成器将生成一个形状为 (4, 100, 100, 1) 的数组。

检查此改编代码是否有效

def input_generator(folder, directories):

    Streams = []
    for i in range(len(directories)):
        Streams.append(os.listdir(folder + "/" + directories[i]))
        for j in range(len(Streams[i])):
            Streams[i][j] = "Stream" + str(i + 1) + "/" + Streams[i][j]   
        Streams[i].sort()


    length = len(Streams[0])
    index = 0
    while True:
        X = []
        y = np.zeros(4)
        for Stream in Streams:
            image = load_img(folder + '/' + Stream[index], grayscale = True)
            array = img_to_array(image).reshape((1,100,100,1))
            X.append(array)
        y[int(Stream[index][15]) - 1] = 1
        index += 1
        index = index % length
        yield np.vstack(X), y

关于python - Keras Python 多图像输入形状错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44399299/

相关文章:

python - 在 Airflow CLI 中测试 DAG 时出现 DagNotFound 错误

python - 将 Scipy 与 Pandas 一起使用的警告

javascript - 无法使用 Python 和请求模块从 .aspx 登录页面获取所需的响应

python - 尝试连接两个模型并适合 Keras 时出现断言错误

java - 使用 Encog 自学习神经网络

python - 更新神经网络中的权重

python - sigmoid 函数在神经网络中的作用导数

python - 我的 Python 代码没有写入我的文件。为什么?

video - 自动选择视频的缩略图

matlab - 使用 Ransac 的仿射模型