无法将输入数组从形状(8,8,3)广播到形状(8,8,2048,3)

时间:2018-11-01 22:18:04

标签: python numpy tensorflow conv-neural-network

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

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

这是出现的错误:

回溯(最近通话最近):

  

文件“ 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行       提高self._value文件“ C:\ Users \ Shangai \ AppData \ Local \ conda \ conda \ envs \ PSAI \ lib \ multiprocessing \ pool.py”,   第119行,在工作程序中       结果=(真,函数(* args,** kwds))文件“ C:\ Users \ Shangai \ AppData \ Local \ conda \ conda \ envs \ PSAI \ lib \ site-packages \ keras \ utils \ data_utils.py” ,   get_index中的第401行       返回_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”,   第144行,在_get_batches_of_transformed_samples中       batch_x [i] = x ValueError:无法将输入数组从形状(8,8,3)广播到形状(8,8,2048,3)

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

回溯(最近通话最近):

  

文件“ C:/Users/Shangai/PycharmProjects/PSai/INCEPTION.py”,第234行,在          validate_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”,   在fit_generator中的第1315行       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行,进入       six.raise_from(StopIteration(e),e)在stop_eration中,文件“”,第2行,在stop_eration中:无法广播来自shape的输入数组   (8,8,3)变成形状(8,8,2048,3)

1 个答案:

答案 0 :(得分:0)

输入张量似乎不正确。 通常,仅当两个数组/张量具有相同的维数时,广播才有效。在您的情况下,这是不正确的:

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, :]
# A = A[:, :, None, :]  # Alternative
C = A + B # Works

另一种可能性是使用函数 numpy.expand_dims 。 相同的符号可用于 keras / tensorflow 中的张量(即 tensorflow.newaxis tensorflow.expand_dims )。