首页 > 解决方案 > 在 Keras 中使用 ModelCheckpoint 时的最大递归深度错误

问题描述

我正在训练一个具有约 30,000 个参数的模型,并且我想使用 ModelCheckpoint 回调在每个 epoch 之后保存模型的状态。

目前,我无法保存模型。我收到以下错误:

RuntimeError: maximum recursion depth exceeded while calling a Python object

我尝试了在其他地方(例如此处)找到的解决方案,但没有帮助。

import sys
sys.setrecursionlimit(10000)

我该如何解决这个问题?

标签: keras

解决方案


啊哈!我在这里找到了线索...

...并对其进行了修改。我有一个最初是这样编写的 Lambda 层:

    def sampling(args):
        z_mean, z_log_sigma = args
        epsilon = K.random_normal(shape=((self.batch_size - self.n_lags), self.hid_dim_2), mean=0., stddev=1.) 
        return z_mean + z_log_sigma * epsilon

    zlambda = Lambda(sampling, output_shape=(self.hid_dim_2,))([z_mean, z_log_sigma]) 

我将它移到了shape一个全局变量中,瞧!

    shape_val = ((self.batch_size - self.n_lags), self.hid_dim_2) #Need this to be a global variable, otherwise Recursion Depth Error of death.

    def sampling(args):
        z_mean, z_log_sigma = args
        epsilon = K.random_normal(shape=shape_val, mean=0., stddev=1.)
        return z_mean + z_log_sigma * epsilon

    zlambda = Lambda(sampling, output_shape=(self.hid_dim_2,))([z_mean, z_log_sigma]) #Saving and loading Lambda layers is weird.

推荐阅读