【问题标题】:Could not broadcast input array from shape (8,8,3) into shape (8,8,2048,3)无法将输入数组从形状 (8,8,3) 广播到形状 (8,8,2048,3)
【发布时间】:2018-11-01 22:18:04
【问题描述】:

所以,我再次尝试使用 keras 运行这个 Inception v3 微调,我认为数组存在一些问题。我已经看过关于这些主题的其他帖子,但现在我不知道该怎么办。我没有很多经验。因此,我们将不胜感激。

这是完整的代码https://github.com/c3s4grod/PecuScope

这是出现的错误:

Traceback(最近一次调用最后一次):

文件 "C:\Users\Shangai\AppData\Local\conda\conda\envs\PSAI\lib\site-packages\keras\utils\data_utils.py", 第 578 行,在获取 输入 = self.queue.get(block=True).get() 文件 "C:\Users\Shangai\AppData\Local\conda\conda\envs\PSAI\lib\multiprocessing\pool.py", 第 644 行,在获取 raise self._value 文件 "C:\Users\Shangai\AppData\Local\conda\conda\envs\PSAI\lib\multiprocessing\pool.py", 第 119 行,在工人中 结果 = (True, func(*args, **kwds)) 文件“C:\Users\Shangai\AppData\Local\conda\conda\envs\PSAI\lib\site-packages\keras\utils\data_utils.py” , 第 401 行,在 get_index 中 return _SHARED_SEQUENCES[uid][i] 文件 "C:\Users\Shangai\AppData\Local\conda\conda\envs\PSAI\lib\site-packages\keras\preprocessing\image.py", 第 1034 行,在 getitem 中 返回 self._get_batches_of_transformed_samples(index_array) 文件 "C:\Users\Shangai\AppData\Local\conda\conda\envs\PSAI\lib\site-packages\keras\preprocessing\image.py", 第 1442 行,在 _get_batches_of_transformed_samples batch_x[i] = x ValueError: 无法将输入数组从形状 (8,8,3) 广播到形状 (8,8,2048,3)

上述异常是以下异常的直接原因:

Traceback(最近一次调用最后一次):

文件“C:/Users/Shangai/PycharmProjects/Psai/INCEPTION.py”,第 234 行,在 validation_steps=steps_test) 文件 "C:\Users\Shangai\AppData\Local\conda\conda\envs\PSAI\lib\site-packages\keras\legacy\interfaces.py", 第 91 行,在包装器中 返回 func(*args, **kwargs) 文件 "C:\Users\Shangai\AppData\Local\conda\conda\envs\PSAI\lib\site-packages\keras\models.py", 第 1315 行,在 fit_generator 中 initial_epoch=initial_epoch) 文件 "C:\Users\Shangai\AppData\Local\conda\conda\envs\PSAI\lib\site-packages\keras\legacy\interfaces.py", 第 91 行,在包装器中 返回 func(*args, **kwargs) 文件 "C:\Users\Shangai\AppData\Local\conda\conda\envs\PSAI\lib\site-packages\keras\engine\training.py", 第 2194 行,在 fit_generator 中 generator_output = next(output_generator) 文件 "C:\Users\Shangai\AppData\Local\conda\conda\envs\PSAI\lib\site-packages\keras\utils\data_utils.py", 第 584 行,在获取 六.raise_from(StopIteration(e),e)文件“”,第2行,在raise_from StopIteration:无法从形状广播输入数组 (8,8,3) 成型 (8,8,2048,3)

【问题讨论】:

    标签: python numpy tensorflow conv-neural-network


    【解决方案1】:

    您的输入张量的大小似乎不正确。 一般来说,广播仅在两个数组/张量具有相同维数的情况下才有效。在你的情况下,这是不正确的:

    8 8 3       -> dim = 3
    8 8 2048 3  -> dim = 4
    

    你需要扩展第一个数组,并在正确的位置添加一个大小为1的轴:

    8 8 1    3
    8 8 2048 3
    

    现在每个轴的大小匹配,并且可以进行 3. 维度广播。 为此,您可以使用 newaxis- 或 None- 表示法。

    import numpy as np
    A = np.ones((8, 8, 3))
    B = np.ones((8, 8, 2048, 3))
    C = A + B # Fails
    A = A[:, :, np.newaxis, :]
    C = A + B # Works
    

    另一种可能是使用函数numpy.expand_dimskeras / tensorflow 中的张量可以使用相同的符号(即 tensorflow.newaxistensorflow.expand_dims)。

    【讨论】:

    • 你是对的!泰。现在我明白我做错了什么。原来我需要设置“include top=True”。
    • 但是出现了另一个错误......元组的东西,它显示 StopIteration: tuple index out of range
    • 这是一个非常常见的错误,可能在很多地方发生。如果您有问题,请尝试创建一个最小示例 [stackoverflow.com/help/mcve]。第一步,这确实有助于您自己(和其他人)理解问题并找到解决方案。
    猜你喜欢
    • 2020-10-06
    • 2020-11-23
    • 2021-08-13
    • 2021-01-20
    • 2018-05-19
    • 2021-07-06
    • 2021-12-25
    • 2018-05-23
    • 1970-01-01
    相关资源
    最近更新 更多