我如何调用model.predict以Keras中存储的GPU数据

我如何调用model.predict以Keras中存储的GPU数据

问题描述:

我已经构建并训练了一个Sequential模型。我如何调用model.predict以Keras中存储的GPU数据

现在,在每个model.predict调用之前,我想要将数据上传到GPU中,执行一些操作,然后使用存储在GPU中的输出调用model.predict,而不下载到内存并切换到keras模型,以便将其上传到GPU再次。

编辑: 我想对输入图像在GPU中使用opencv操作,并使用输出直接调用model.predict,如果可能的话。

您可以通过在模型顶部添加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()

在这里你可以看到两个模型是如此实质上是使用过程中已经了解到的权重共享上层第一个模型的培训