如何解决Tensorflow子类化问题
我有一个resnet模型,由以下类定义:
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无法使用此类调用创建图层图。因此它禁止了他们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。