【问题标题】:How do I call model.predict with data stored in GPU in Keras如何在 Keras 中使用存储在 GPU 中的数据调用 model.predict
【发布时间】:2017-02-11 18:39:13
【问题描述】:

我已经建立并训练了一个序列模型。

现在在每个 model.predict 调用之前,我想将数据上传到 GPU,做一些操作,然后使用存储在 GPU 中的输出调用 model.predict,而不下载到内存并移交给 keras 模型,以便再次上传到 gpu .

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

【问题讨论】:

    标签: tensorflow gpu keras


    【解决方案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() 你可以看到两个模型共享上层,所以本质上是使用在第一个模型的训练过程中已经学习到的权重

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-09
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      • 2017-08-21
      相关资源
      最近更新 更多