2017-02-11 22 views
1

Я создал и обучил последовательную модель.Как мне назвать model.predict с данными, хранящимися в графическом процессоре в Keras

Теперь перед каждым вызовом model.predict я хочу загрузить данные в графический процессор, выполнить некоторые операции, а затем вызвать model.predict, используя вывод, хранящийся на графическом процессоре, без загрузки в память и передачи обслуживания к модели keras для ее загрузки в gpu еще раз.

Редактировать: Я хотел бы использовать opencv-операции на входном изображении в gpu и использовать вывод непосредственно для вызова model.predict, если это возможно.

ответ

1

Вы можете легко достичь этого, добавив операции как Lambda слоев в верхней части модели.

Вот очень простой пример .. можно расширить здесь:

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 

Вот от model.summary() вы можете увидеть, как модели разделяют верхние слои так, в сущности, с использованием весов уже выучили во время подготовка первой модели

 Смежные вопросы

  • Нет связанных вопросов^_^