Je veux écrire un calque personnalisé, où je peux garder une variable en mémoire entre les exécutions. Par exemple,Variable persistante dans Keras Couche personnalisée
class MyLayer(Layer):
def __init__(self, out_dim = 51, **kwargs):
self.out_dim = out_dim
super(MyLayer, self).__init__(**kwargs)
def build(self, input_shape):
a = 0.0
self.persistent_variable = K.variable(a)
self.built = True
def get_output_shape_for(self, input_shape):
return (input_shape[0], 1)
def call(self, x, mask=None):
a = K.eval(self.persistent_variable) + 1
K.set_value(self.persistent_variable, a)
return self.persistent_variable
m = Sequential()
m.add(MyLayer(input_shape=(1,)))
Quand je lance m.predict
, je me attends à la persistent_variable
mis à jour pour obtenir et imprimer la valeur incrémentée. Mais on dirait qu'il imprime toujours 0
# Dummy input
x = np.zeros(1)
m.predict(x, batch_size=1)
Ma question est, comment puis-je faire l'incrément persistent_variable
et sauve après chaque course de m.predict
Merci, Naveen
Salut Phylliida, On dirait que la bonne solution. Mais ça ne marche pas parfois. J'ai couru 'a = model.predict (np.random.rand (100, 10), batch_size = 1) imprimer (a)' '[0. 1. 2. 3. 5. 6. 6. 7 9. 10. 10. 11. ....] ' Il manque parfois des mises à jour. –
Euh, ça pourrait être une condition de course. Je ne sais pas vraiment désolé, nous pouvons attendre pour voir si quelqu'un d'autre sait – Phylliida
Vous avez raison. Il pourrait y avoir une condition de course dans les keras. J'ai ajouté un calque 'RepeatVector' après' CounterLayer', et cela a fonctionné. –