Tenflow bug(一)——tensorflow.python.framework.errors_impl.InvalidArgumentError

问题描述:

      在做resnet101分类时,在原本resnet50做数字分类的基础上,改成了采用别的预训练集训练自己的数据,在训练完生成.pd文件时,出现如下问题:

tensorflow.python.framework.errors_impl.InvalidArgumentError: Assign requires shapes of both tensors to match. lhs shape= [10] rhs shape= [12]

还有一种形式:

tensorflow.python.framework.errors_impl.InvalidArgumentError: Assign requires shapes of both tensors to match. lhs shape= [2048,10] rhs shape= [2048,12]
     [[{{node save/Assign_1}} = Assign[T=DT_FLOAT, _class=["loc:@Predict/weights"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/device:GPU:0"](Predict/weights, save/RestoreV2/_3)]]
     [[{{node save/RestoreV2/_1082}} = _Send[T=DT_FLOAT, client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device_incarnation=1, tensor_name="edge_1087_save/RestoreV2", _device="/job:localhost/replica:0/task:0/device:CPU:0"](save/RestoreV2:541)]]

解决办法:

    通过查阅资料发现,tensorflow.python.framework.errors_impl.InvalidArgumentError故障大部分是参数问题。比如这个问题我自己看我的代码模型没有毛病,后来发现自己在导入一个模型的时候,忘了修改模型参数与自己train时候用到的参数匹配。

                                        Tenflow bug(一)——tensorflow.python.framework.errors_impl.InvalidArgumentError_第1张图片

                                        Tenflow bug(一)——tensorflow.python.framework.errors_impl.InvalidArgumentError_第2张图片
     train时候用的模型有10个输出,原先用于另一个数据集的模型有12个输出,在修改后将原本生成的.ckpt文件删掉,重新训练,再导出就可以了。 概括地讲,你在restore的时候必须保证当先代码构建的模型与原模型参数匹配,如果不匹配则会报错。当然这个问题尤其在你有多个载入模块的时候,需要仔细校验每一个载入模块的参数类型,数目是否与原来train时候的参数数目匹配。
    唯有如此,才能使自己的模型得到验证工作。

    在修改网络的优化方法时,也要注意模型的参数匹配,否则也会出现这个错误。例子如下:

https://blog.csdn.net/check2255/article/details/78321818


参考:

https://blog.csdn.net/qq_41185868/article/details/79994791 
 

你可能感兴趣的:(python,bug,TensorFlow,Bug,BUG)