2017-02-11 2 views
1

Ich habe ein Sequential-Modell gebaut und trainiert.Wie rufe ich Model.Predict mit Daten in GPU in Keras gespeichert

Jetzt vor jedem Model.Predict Aufruf möchte ich die Daten in GPU hochladen, einige Operationen und dann Model.Predict mit der in GPU gespeicherten Ausgabe ohne Download in den Speicher und Übergabe an Keras-Modell für das Hochladen auf GPU nochmal.

Edit: Ich möchte opencv Operationen auf das Eingabebild in GPU verwenden und die Ausgabe direkt verwenden, um Model.Predict aufrufen, wenn möglich.

Antwort

1

Sie können dies leicht erreichen, indem Sie die Operationen Lambda Schichten auf der Oberseite des Modells hinzufügen.

Hier ist ein sehr einfaches Beispiel .. Sie von hier verlängern können:

import numpy as np 
from keras import backend as K 
from keras.models import Sequential, Model 
from keras.layers import Dense, Lambda, Input, merge 

X = np.random.random((1000,5)) 
Y = np.random.random((1000,1)) 

inp = Input(shape = (5,)) 
d1 = Dense(60, input_dim=5, init='normal', activation='relu') 
d2 = Dense(1, init='normal', activation='sigmoid') 
out = d2(d1(inp)) 

model = Model(input=[inp], output=[out]) 
model.compile(loss='binary_crossentropy', optimizer='adam') 
model.summary() 
model.fit(X, Y, nb_epoch=1) 



X1 = np.random.random((10,3)) 
X2 = np.random.random((10,2)) 

inp1 = Input(shape = (3,)) 
inp2 = Input(shape = (2,)) 

p1 = Lambda(lambda x: K.sqrt(x))(inp1) 
p2 = Lambda(lambda x: K.tf.exp(x))(inp2) 
mer = merge([p1, p2], mode='concat') 
out2 = d2(d1(mer)) 

model2 = Model(input=[inp1, inp2], output=[out2]) 
model2.summary() 

ypred = model2.predict([X1, X2]) 
print ypred.shape 

Hier von model.summary() Sie sowohl die Modelle der oberen Schichten teilen sehen können so im Wesentlichen ist die Gewichte bereits während der Verwendung gelernt Training des ersten Modells

Verwandte Themen