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)
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值