我已经构建并训练了一个Sequential模型。
现在在每个model.predict调用之前,我想将数据上传到GPU,做一些操作然后使用存储在GPU中的输出调用model.predict而不下载到内存并切换到keras模型,以便再次上传到gpu
编辑: 我想对gpu中的输入图像使用opencv操作,并在可能的情况下直接使用输出来调用model.predict。
答案 0 :(得分: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()
开始,您可以看到两个模型共享上层,所以本质上是使用在第一个模型训练期间已经学过的权重