2017-05-01 8 views
1

ich ein einfaches trainiert keras Modell haben:Ändern Keras Modell nach dem Training

model = Sequential() 
model.add(Dense(output_dim, activation='relu',input_shape(input_dim,))) 
model.add(Dense(output_dim, activation='sigmoid')) 
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 
model.fit(x_train, y_train) 

Nachdem ich das Modell trainiere ich eine Schicht hinzugefügt werden soll, wo ich die Gewichte wählen. Ich habe versucht,

model.layers.append(Dense(output_dim, activation='sigmoid', input_shape=(input_dim,), kernel_initializer='ones'))

Aber es funktioniert nicht ... Ich fühle mich wie ich das Modell erneut kompilieren müssen möglicherweise, aber es funktioniert nicht. Irgendwelche Ideen?

Antwort

3

Wenn ich Ihre Frage richtig verstanden habe, dann brauchen Sie nur Gewichte für alle Ebenen des Modells zu speichern. Sie können es auf verschiedene Arten tun. Die einfachste ist die folgende:

# training ... 
temp_weights = [layer.get_weights() for layer in model.layers] 

nach dem Modell trainiert wurde - es notwendig ist Modell mit einer weiteren Schicht wieder aufzubauen, wie man wollte:

model = Sequential() 
model.add(Dense(output_dim, activation='relu',input_shape(input_dim,))) 
model.add(Dense(output_dim, activation='sigmoid')) 
model.add(Dense(output_dim, activation='sigmoid', kernel_initializer='ones')) # new layer 
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 

Und Last zuvor gespeicherten Gewichte in die jeweiligen Schichten :

for i in range(len(temp_weights)): 
    model.layers[i].set_weights(temp_weights[i]) 
Verwandte Themen