首页 > 解决方案 > ValueError:变量的初始化程序来自控制流构造内部,例如循环或条件。使用 lambda 作为初始化器

问题描述

这是我在 Keras 的控制流中声明 LSTM 层时遇到的问题的简化版本。该行K.variable(kernel_init([3,3], dtype='float64'), dtype='float64',name='kernel')Keras base_layer.py的一部分。因此这条线不能改变。根据这个问题的推荐,我尝试创建一个 LSTM 网络并得到相同的错误。我把它归结为下面的简化代码。

以下代码执行导致错误

import tensorflow as tf
from keras import backend as K

def cond(i):
  return i < 3

def body(i):
    kernel_init = lambda x, dtype='float64' : tf.random.normal(x, dtype=dtype)
    vars = K.variable(kernel_init([3,3], dtype='float64'),
                            dtype='float64',
                            name='kernel')
    print("succesfully variable declared")
    return (i+1,vars)

tf.while_loop(cond, body, [0])

ValueError:变量 while/kernel/ 的初始化程序来自控制流构造内部,例如循环或条件。在循环或条件中创建变量时,使用 lambda 作为初始化器。

标记多线程,因为上面的代码最初在并行线程中运行。

标签: pythonmultithreadingtensorflowkerastf.keras

解决方案


推荐阅读