问题描述
class Modelresnet(tf.keras.models.Model):
def __init__(self):
super(Modelresnet,self).__init__()
self.resBlock1 = ResBlock(num_filters=32)
self.resBlock2 = ResBlock(num_filters=32)
self.dense1 = tf.keras.layers.Dense(units=128,activation='relu')
self.dense2 = tf.keras.layers.Dense(units=10,activation='softmax')
def call(self,input_tensor,training=False):
x = self.resBlock1(input_tensor,training=training)
x = self.resBlock2(x,training=training)
x = tf.keras.layers.Flatten()(x)
# Option 1
x = self.dense1(x)
x = self.dense2(x)
# Option 2
# x = tf.keras.layers.Dense(units=128,activation='relu')(x)
# x = tf.keras.layers.Dense(units=10,activation='softmax')(x)
return x
当我调用Modelresnet2.fit()时,一切正常! 但是,如果在“调用”方法中将Option1替换为Option2,则会出现以下错误:
ValueError:tf.function-decorated函数试图在非首次调用时创建变量。 python-BaseException
不确定我了解问题的出处。 谢谢!
解决方法
呼叫时:
x = tf.keras.layers.Dense(units=128,activation='relu')(x)
您正在创建一个密集层,该层将立即被破坏(退出call()方法之后)。这没有道理-您将无法训练。
Tensorflow无法使用此类调用创建图层图。因此它禁止了他们。