几周前,我使用Keras和Theano后端训练了卷积神经网络(CNN),并将其保存为h5文件。
但今天当我尝试打开它时,我从Theano bn.py文件中收到BatchNormalization图层的错误:
ValueError:epsilon必须至少为1e-5,得到9.99999974738e-06
所以这是我的问题:
答案 0 :(得分:1)
这是此问题的临时解决方案。 Theano文件bn.py自上一个版本(第220和380行)以来有两个类似的测试,这些测试是造成这个问题的原因:
if epsilon < 1e-5:
raise ValueError("epsilon must be at least 1e-5, got %s" % str(epsilon))
临时解决方案是用做法取代加注:
if epsilon < 1e-5:
epsilon = 1e-5
这不太理想,但它允许读取旧文件。不要忘记之后撤消此修改。
答案 1 :(得分:1)
发布我的案例供将来参考,因为duckduckgo.com将我带到了这里。
在我的情况下,我没有与OP相同的错误,但我遇到了同样的问题,即有一个h5文件经过培训并保存但由于keras issue 2814而无法加载:{{1} }。我最后暂时修改了来自
的lambda反序列化函数keras.layers.core.Lambda.from_config中的keras代码TypeError: arg 5 (closure) must be tuple
到
elif function_type == 'lambda':
# Unsafe deserialization from bytecode
function = func_load(config['function'], globs=globs)
这绕过了违规的lambda函数。它对我有用,因为特定的h5中的特定lambda函数只是作为 elif function_type == 'lambda':
# Unsafe deserialization from bytecode
if 'my_lambda_name' in config['function'][0]:
print('bypassing lambda function')
function = lambda x: x
else:
function = func_load(config['function'], globs=globs)
表示,尽管它比那更复杂。
然后我写了一个小脚本,加载模型并将其保存在一个新文件中(带有绕过的lambda图层)
lambda x: x