【问题标题】:How to fix 'need at least one array to concatenate' error?如何修复“需要至少一个数组来连接”错误?
【发布时间】:2019-08-02 19:53:59
【问题描述】:

我已经阅读了有关 ValueError 的各种帖子,但没有得到令人满意的解决方案。请问,谁能帮我解决我做错了什么??

代码:

 assert(type(images) == list)
 # assert(type(images[0]) == np.ndarray)
 # assert(len(images[0].shape) == 3)
 # assert(np.max(images[0]) > 10)
 # assert(np.min(images[0]) >= 0.0)
 inps = []
 for img in images:
   img = img.astype(np.float32)
   inps.append(np.expand_dims(img, 0))
 bs = 100
 with tf.Session() as sess:
   preds = []
   n_batches = int(math.ceil(float(len(inps)) / float(bs)))
   for i in range(n_batches):
       sys.stdout.write(".")
       sys.stdout.flush()
       inp = inps[(i * bs):min((i + 1) * bs, len(inps))]
       inp = np.concatenate(inp, 0)
       pred = sess.run(softmax, {'ExpandDims:0': inp})
       preds.append(pred)
   preds = np.concatenate(preds, 0)
   scores = []
   for i in range(splits):
     part = preds[(i * preds.shape[0] // splits):((i + 1) * preds.shape[0] // splits), :]
     kl = part * (np.log(part) - np.log(np.expand_dims(np.mean(part, 0), 0)))
     kl = np.mean(np.sum(kl, 1))
     scores.append(np.exp(kl))
   return np.mean(scores), np.std(scores)

错误:

>File "/content/Inception-Score/inception_score.py", line 45, in >get_inception_score
>    preds = np.concatenate(preds, 0)
>ValueError: need at least one array to concatenate

【问题讨论】:

    标签: python numpy tensorflow


    【解决方案1】:

    您似乎缺少要连接的数组的参数。您指定了要连接的初始数组和轴,但没有指定第二个数组——因此“需要至少一个数组来连接”。

    np.concatenate() 在第一个参数中至少有两个数组,详见文档here。看起来“preds”只是一个数组。我不确定您要做什么,但也许连接不是您想要的?

    【讨论】:

    • 我明白你的意思。但是 inp = np.concatenate(inp, 0) 这是有效的。这里也传递了一个数组
    • 你能确认第一个循环一直在运行吗?我想知道n_batches 是否曾经大于 0,因为如果它大于 0,那也会产生错误。
    • 你是对的@Cade。甚至第一个循环也没有运行。
    【解决方案2】:

    问题似乎出在 np.concatenate 中,它需要一个数组数组,而您没有提供该数组

    #syntax
    numpy.concatenate((a1, a2, ...), axis=0, out=None)
    

    参数:
    a1, a2, ... : array_like 的序列 数组必须具有相同的形状,除了轴对应的维度(默认为第一个)。

    axis : int, optional 数组将沿其连接的轴。如果axis为None,则数组在使用前会被展平。默认为 0。

    out:ndarray,可选如果提供,则放置结果的目的地。形状必须正确,与未指定 out 参数时连接返回的形状相匹配。

    返回:ndarray 串联的数组。

    检查preds它返回什么

    【讨论】:

    • 我明白你的意思。但是inp = np.concatenate(inp, 0) 这是有效的。这里也传递了一个数组。
    猜你喜欢
    • 2019-07-24
    • 2023-02-10
    • 2021-04-23
    • 2021-08-07
    • 1970-01-01
    • 2020-12-22
    • 2017-11-16
    • 2014-11-18
    • 1970-01-01
    相关资源
    最近更新 更多