在角膜训练中a形状和权重不同时必须指定轴

时间:2018-07-18 17:48:29

标签: python tensorflow keras deep-learning

我正在尝试训练一个网络,其中使用了两个生成器,一个用于训练,一个用于验证。这些只是为了无可辩驳地产生样本的函数。

在验证结束时出现以下错误:

paper-input {
  --paper-input-container-invalid-color: orange;
}

我查看了代码,File "/home/ubuntu/tensorflow/lib/python3.5/site-packages/numpy/lib/function_base.py", line 1142, in average "Axis must be specified when shapes of a and weights " 中的函数training_generator包含以下行

keras.engine

看一下averages.append(np.average([out[i] for out in outs_per_batch], weights=batch_sizes)) 的定义,当权重和数组的长度不同时,该函数需要np.average。我调试了代码,然后将axisaxis=0放在np.squeeze上,它““”“有效”“”“”,只是在它收集了摘要统计信息后停了几行验证。我不能停止认为代码中的其他地方有错误。

这是我的发电机

out[i]

这是拟合函数

def batch_generator(batch_size, folder):
    files = listdir(folder)
    print("Folder " + folder + " with " + str(len(files)) + " files.")
    np.random.shuffle(files)
    while True:
        np.random.shuffle(files)
        for i in range(batch_size, len(files), batch_size):
            batch = files[(i-batch_size):(i)]
            batch = tensor_generator(folder, files=batch)
            yield (batch, batch)

def tensor_generator(folder, files=None):
    if files is None:
        files = listdir(folder)
    verbose = len(files)>100
    if verbose:
        pbar = tqdm(total=len(files), unit='img')
    tensor = []
    for f in files:
        f = SimpleITK.ReadImage(join(folder, f))
        f = SimpleITK.GetArrayFromImage(f)
        f = (f + 1000)/4000
        tensor.append(f)
        if verbose: pbar.update(1)
    if verbose: pbar.close()
    return np.stack(tensor, axis=0)

你知道怎么了吗?

2 个答案:

答案 0 :(得分:0)

您需要在图像空间尺寸中指定None,例如shape=(None,None,3)用于RGB图像。

顺便说一句,使用预训练的模型来预测不同尺寸的测试图像并非总是可行的。包含Dense层的预训练模型。但是,应该总是有可能先将测试图像调整为用于训练的尺寸,然后根据调整后的版本图像进行预测。

答案 1 :(得分:0)

我遇到了同样的问题。即使我不知道造成这个问题的原因,我也解决了这个奇怪的问题。

您只需要将代码validation_data=x_test更改为validation_data=next(x_test)。这意味着您只需要在验证数据生成器上添加next()