【发布时间】:2022-01-12 00:20:13
【问题描述】:
这是代码:
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()时才会出现
【问题讨论】:
-
第一次密集调用不需要传递 input_shape 吗?
-
@MarkLavin 不,但更早的时候这已经解决了。请看我正在做的教程
-
不要指向教程,而是包含您自己的代码来重现问题,因为您显然在做不同的事情。
-
@Dr.Snoopy 很好,现在可以了。我什么都没碰,我刚刚重新启动了我的电脑。似乎这是依赖关系之间的“停电”;