我如何调用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()
在这里你可以看到两个模型是如此实质上是使用过程中已经了解到的权重共享上层第一个模型的培训