ValueError: You are trying to load a weight file containing 1 layers into a model with 35 layers.

当我在是keras在具有多块GPU的电脑上训练神经网络模型时保存的参数重新导入网络时出现这个问题,查看网上一堆教程,解决的恨不靠谱,上面最多的答案就是下面这样的:

weight_path = ' '
model.load_weights(weight_path, by_name = True)

这种方式基本上就是自欺欺人嘛,的确不会再报上面的错误了,但你有没有发现参数导入的超快,难道没有想到另一种可能吗,如果你保存的参数中根本没有与当前模型相匹配的层,by_name = True导致的结果就是什么都没导进去,亲测就是这样。
其实如果你更加清晰的了解到底那里出了问题,你可以看一下你网络的层与你所保存参数的哪些层出了偏差,并且你也可以尝试使用单个GPU时是否会出现这种问题。
写到这里估计你已经明白问题出在哪里了,在使用多块GPU训练模型时,使用同单个GPU时保存模型的方法是不合适的,由于模型的计算量被分配到多块GPU上,所以在保存模型时,模型的参数虽然一样,但具体顺序已经改变了(这是我的个人理解,不一定对)
解决办法如下:

with tf.device('/cpu:0'):
	single_model = 你的模型
parallel_model = multi_gpu_model(model, gpus=n)
parallel_model.compile(loss='categorical_crossentropy',optimizer='rmsprop')
parallel_model.fit(x, y, epochs=20, batch_size=256)
single_model.summary()
single_model.save_weights(save_path)

你可能感兴趣的:(人工智能)