2017-11-08 5 views
0

Ich habe Probleme mit den Keras-Backend-Funktionen zum Setzen von Werten. Ich versuche, ein Modell von PyTorch zu Keras zu konvertieren und versuche, die Gewichte des Keras-Modells einzustellen, aber die Gewichte scheinen nicht eingestellt zu werden. Hinweis: Ich setze nicht wirklich mit np.ones, nur das für ein Beispiel verwendend.Wie man Gewichte in Keras mit einem numply-Array einstellt?

ich versucht habe ...

Laden eines Modells bestehenden

import keras 
from keras.models import load_model, Model 
model = load_model(model_dir+file_name) 
keras_layer = [layer for layer in model.layers if layer.name=='conv2d_1'][0] 

ein einfaches Modell

img_input = keras.layers.Input(shape=(3,3,3)) 
x = keras.layers.Conv2D(1, kernel_size=1, strides=1, padding="valid", 
use_bias=False, name='conv1')(img_input) 
model = Model(img_input, x) 
keras_layer = [layer for layer in model.layers if layer.name=='conv1'][0] 

Dann mit set_weights oder set_value

keras_layer.set_weights([np.ones((1, 1, 3, 1))]) 

oder erstellen. ..

K.batch_set_value([(weight,np.ones((1, 1, 3, 1))) for weight in keras_layer.weights]) 

danach rufe ich entweder eine der folgenden Möglichkeiten:

K.batch_get_value([weight for weight in keras_layer.weights]) 
keras_layer.get_weights() 

und keiner der Gewichte scheinen gesetzt wurden. Die gleichen Werte wie zuvor werden zurückgegeben.

[array([[[[ 1.61547325e-06], 
     [ 2.97779252e-06], 
     [ 1.50160542e-06]]]], dtype=float32)] 

Wie setze ich die Gewichte einer Schicht in Keras mit einer Reihe von Werten?

+1

Können Sie Ihre Modelldefinition angeben? Auch das Format Ihrer Ebenen. –

+0

Muss noch einen anderen Fehler gemacht haben. Die angenommene Antwort funktioniert für mich. – DeltaLee

Antwort

2

Was ist keras_layer in Ihrem Code?

Sie können Gewichte diese Weise einstellen:

model.layers[i].set_weights(listOfNumpyArrays)  
model.get_layer(layerName).set_weights(...) 
model.set_weights(listOfNumpyArrays) 

Wo model eine Instanz eines bestehenden Modells ist. Sie können die erwartete Länge der Liste und ihrer Array-Shapes mit der Methode get_weights() aus den gleichen Instanzen oben sehen.

+0

Wenn Sie get_weights erneut aufrufen, nachdem Sie die Gewichtungen festgelegt haben, werden die ursprünglichen Gewichtungen und nicht die Werte in der Liste der übergebenen numpy Arrays zurückgegeben oder sehen Sie ein anderes Verhalten? – DeltaLee

+1

Wenn ich solche Gewichte setze, gibt die Methode 'get_weights()' die neuen Gewichte zurück. –

0

Wenn Sie versuchen, Pytorch-Modell in Keras-Modell zu konvertieren, können Sie auch einen Pytorch2Keras Konverter versuchen.

Es unterstützt Basis-Layer wie Conv2d, Linear, Aktivierungen, einige elementweise Operationen usw. Sie können pytorch2keras/layers.py für Layer-Konvertierungsfunktionen folgen.

Verwandte Themen