这是代码:
def point_wise_feed_forward_network(d_model, dff):
return tf.keras.Sequential([
tf.keras.layers.Dense(dff, activation='relu'), # (batch_size, seq_len, dff)
tf.keras.layers.Dense(d_model) # (batch_size, seq_len, d_model)
])我在phew类中使用它,并将其初始化为:
class Foo(tf.keras.layers.Layer):
def __init__(self, d_model, dff):
super().__init__()
self.net = point_wise_feed_forward_network(d_model, dff)
...
def call(self, args):
... # getting prev_layer (which is a tf.keras.layers.LayerNormalization() layer)
var = self.net(prev_layer)
...主要输出错误是:
ValueError: Weights for model decoder_sequential have not yet been created. Weights are created when the Model is first called on inputs or `build()` is called with an `input_shape`File "<ipython-input-314-94b9d1a33527>", line 25, in train_step *
gradients = tape.gradient(loss, transformer.trainable_variables)
File "C:\Users\User\anaconda3\envs\tfm2\lib\site-packages\keras\engine\base_layer.py", line 2308, in trainable_variables
return self.trainable_weights
File "C:\Users\User\anaconda3\envs\tfm2\lib\site-packages\keras\engine\training.py", line 2104, in trainable_weights
trainable_variables += trackable_obj.trainable_variables
File "C:\Users\User\anaconda3\envs\tfm2\lib\site-packages\keras\engine\base_layer.py", line 2308, in trainable_variables
return self.trainable_weights
File "C:\Users\User\anaconda3\envs\tfm2\lib\site-packages\keras\engine\base_layer.py", line 1357, in trainable_weights
children_weights = self._gather_children_attribute('trainable_variables')
File "C:\Users\User\anaconda3\envs\tfm2\lib\site-packages\keras\engine\base_layer.py", line 2915, in _gather_children_attribute
return list(
File "C:\Users\User\anaconda3\envs\tfm2\lib\site-packages\keras\engine\base_layer.py", line 2917, in <genexpr>
getattr(layer, attribute) for layer in nested_layers))
File "C:\Users\User\anaconda3\envs\tfm2\lib\site-packages\keras\engine\base_layer.py", line 2308, in trainable_variables
return self.trainable_weights
File "C:\Users\User\anaconda3\envs\tfm2\lib\site-packages\keras\engine\base_layer.py", line 1357, in trainable_weights
children_weights = self._gather_children_attribute('trainable_variables')
File "C:\Users\User\anaconda3\envs\tfm2\lib\site-packages\keras\engine\base_layer.py", line 2915, in _gather_children_attribute
return list(
File "C:\Users\User\anaconda3\envs\tfm2\lib\site-packages\keras\engine\base_layer.py", line 2917, in <genexpr>
getattr(layer, attribute) for layer in nested_layers))
File "C:\Users\User\anaconda3\envs\tfm2\lib\site-packages\keras\engine\base_layer.py", line 2308, in trainable_variables
return self.trainable_weights
File "C:\Users\User\anaconda3\envs\tfm2\lib\site-packages\keras\engine\training.py", line 2099, in trainable_weights
self._assert_weights_created()
File "C:\Users\User\anaconda3\envs\tfm2\lib\site-packages\keras\engine\sequential.py", line 471, in _assert_weights_created
super(functional.Functional, self)._assert_weights_created() # pylint: disable=bad-super-call
File "C:\Users\User\anaconda3\envs\tfm2\lib\site-packages\keras\engine\training.py", line 2736, in _assert_weights_created
raise ValueError(f'Weights for model {self.name} have not yet been '所以,我在使用它的每个类中都初始化了它。为什么它说我没有创建模型?
PD:只有当我使用tf.GradientTape()时才会出现此错误
发布于 2021-12-06 23:41:05
对于模型中的第一层,您需要传递输入形状,例如(224,224,3)
tf.keras.layers.Dense(dff, activation='relu', input_shape=(224,224,3)您还需要编译模型。
https://stackoverflow.com/questions/70251452
复制相似问题