ATTENTION
我的是TF2.5版本 所以在调用很多函数的情况都会出现版本不兼容的报错
0.学习中使用TensorFlow可不能缺少这个网站啊,好东西给大家分享
https://tensorflow.google.cn/versions
包含各个版本的代码api
1.在二代中其实还兼容一代 的部分函数只不过名字变了 所以需要改名
例如tf.compat.v1.reset_default_graph替代了tf.reset_default_graph
所以可以查一下就行
2.许多模块的函数更新后缺失了 可以网上找到自己加进去
def populate_dict_with_module_objects(target_dict, modules, obj_filter):
for module in modules:
for name in dir(module):
obj = getattr(module, name)
if obj_filter(obj):
target_dict[name] = obj
def to_snake_case(s):
return ''.join(['_' + ch.lower() if ch.isupper() else ch for ch in str(s)]).lstrip('_')
可以放到该路径下的文件修改
3.随着版本更新旧版本中的函数参数也会出现变化
TypeError: convolution_v2() got an unexpected keyword argument 'filter'
出现该报错后,全网找解答方法 没有找到,直到最后自己终于发现了问题存在哪。
以一个同类型的问题(convolution_v2() got an unexpected keyword argument ‘dilation_rate’)做演示:
定位到错误源头不在dispatch里而是backend的文件里,调用显示如下
可以看的出代码中的参数输入名称与这个理论接受名称不同,其中之前的问题是filter缺少s,我已修改,这里可以将dilation后面删掉做匹配即可。
4.又是版本兼容的问题
_, ignore_mask = K.control_flow_ops.while_loop(lambda b,*args: b<m, loop_body, [0, ignore_mask])
AttributeError: module 'keras.backend' has no attribute 'control_flow_ops'
分析了旧版本Keras的文件代码
点此查看Keras历史版本代码
就是之前有import 新版本没有import 在新版本里的backend.py里面添加一下一下代码就行
from tensorflow.python.ops import control_flow_ops
效果如图
记住是在backend.py里添加而不是model.py里面添加