Tensorflow 如何在TF2.0中的`tf.Module`中初始化变量

Tensorflow 如何在TF2.0中的`tf.Module`中初始化变量,tensorflow,tensorflow2.0,Tensorflow,Tensorflow2.0,在Tensorflow2.0中,我发现我可以用以下方式初始化模型中的变量 classmymodel(tf.keras.Model): 定义初始化(self,*args,kwargs**): “这里有一些定义” self(tf.keras.Input(shape=(3,)) def呼叫(自我,x): “某些实现” 但我不能做像这样的事情 classmymodel(tf.keras.Model): 定义初始化(self,*args,kwargs**): “这里有一些定义” self.step(tf

在Tensorflow2.0中,我发现我可以用以下方式初始化模型中的变量

classmymodel(tf.keras.Model):
定义初始化(self,*args,kwargs**):
“这里有一些定义”
self(tf.keras.Input(shape=(3,))
def呼叫(自我,x):
“某些实现”
但我不能做像这样的事情

classmymodel(tf.keras.Model):
定义初始化(self,*args,kwargs**):
“这里有一些定义”
self.step(tf.keras.Input(shape=(3,))
def步骤(自我,x):
“某些实现”
这将产生错误
我想做第二个的原因是我试图从
tf.Module
继承
MyModel
,它没有可用的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu调用
——即使我定义了一个,也会出现同样的错误。我想知道是否有一种方法可以像我在第一个代码块中那样初始化继承自
tf.Module
的类中的变量?

Keras函数/符号API仅与Keras兼容(例如编译+拟合)

您可能可以使用
tf.zeros
(例如
self(tf.zeros(input_shape))
),尽管这可能会产生不良的副作用(例如影响批次标准统计)

如果您想要一个健壮的解决方案,您可能需要考虑使用<代码> SNT.Bug(Soad,InPosithStand)< /C> > [0 ],这是一个实用函数(包含一组常见的代码< TF>模块>代码> s)的库。


[0]

为什么使用
tf.Module
而不是
tf.keras.layers.Layer
?嗨,@OlivierDehaene,因为我发现我不需要keras界面的大部分功能。嗨,谢谢回答。是否有一种简单的TF2.0方法来初始化变量?在网络开始培训之前,我只需要访问可培训的变量。最简单的方法是在开始培训之前,用示例输入(例如零)调用您的模块<代码>模型=MyModel();model(tf.zeros(input_shape))#创建模型中的所有变量。可能值得一看这个示例,它不是特定于十四行诗的(除了使用十四行诗模块和优化器)。通过这种方式构建训练循环,您可以看到我们延迟请求模型参数,直到我们计算了损失和梯度。感谢您的帮助。我已经检查了你提供的例子。它在向前传递后获取可训练变量。然而,我希望在使用网络之前获得可训练变量。此外,正如您在回答中所说的,使用伪数据(如零)会给批量标准化带来偏差。我想知道所有这些是否都表明TF2本机不支持在第一次网络通过之前获取可训练变量?很抱歉延迟,非常感谢。你真的帮了我的忙!