我正在尝试训练一个网络,其中使用了两个生成器,一个用于训练,一个用于验证。这些只是为了无可辩驳地产生样本的函数。
在验证结束时出现以下错误:
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
。我调试了代码,然后将axis
或axis=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)
你知道怎么了吗?
答案 0 :(得分:0)
您需要在图像空间尺寸中指定None
,例如shape=(None,None,3)
用于RGB图像。
Dense
层的预训练模型。但是,应该总是有可能先将测试图像调整为用于训练的尺寸,然后根据调整后的版本图像进行预测。
答案 1 :(得分:0)
我遇到了同样的问题。即使我不知道造成这个问题的原因,我也解决了这个奇怪的问题。
您只需要将代码validation_data=x_test
更改为validation_data=next(x_test)
。这意味着您只需要在验证数据生成器上添加next()
。