Python 在新数据上使用Keras模型

Python 在新数据上使用Keras模型,python,keras,conv-neural-network,Python,Keras,Conv Neural Network,我在Keras中成功地训练了一个ConvNet,现在我想把它应用到新数据上 当然,我可以使用model.save和load_模型,但由于这会为每个分类加载我的整个模型,所以需要很长时间。有没有更优雅的方式 我试图通过保存权重和偏差并将其应用于我的数据以及我使用的激活函数来“重建”我的模型。然而,我没有得到与使用load_模型时相同的结果,所以我一定犯了一个错误 这种重建方法是正确的,还是有更优雅的方法 编辑:我添加了我的代码,希望可以理解 # sl: List containing for ea

我在Keras中成功地训练了一个ConvNet,现在我想把它应用到新数据上


当然,我可以使用model.save和load_模型,但由于这会为每个分类加载我的整个模型,所以需要很长时间。有没有更优雅的方式

我试图通过保存权重和偏差并将其应用于我的数据以及我使用的激活函数来“重建”我的模型。然而,我没有得到与使用load_模型时相同的结果,所以我一定犯了一个错误

这种重建方法是正确的,还是有更优雅的方法

编辑:我添加了我的代码,希望可以理解

# sl: List containing for each layer: number of parameter matrices (=2 for conv or fully 
# connected layer, =0 for flatten layer) & shapes of the matrices
# weight_list_lc: List containing my weight matrices
# biases_list_lc: List containing my biases
def Is_Trip_ConvNet(inp):
    n_layers = len(sl)
    curr_dim = inp.shape
    for l in range(1,n_layers):
        if sl[l][0] > 0: # weights available
            weights = np.array(weight_list_lc[l-1])
            weights = weights.reshape(np.array(sl[l][1])) # correct shape 
            biases = bias_list_lc[l-1]
            if len(sl[l][1]) == 3: # ConvLayer
                field_size = sl[l][1][0]
                n_nodes = int(curr_dim[0]-field_size+1)
                n_filt = sl[l][1][2]
                out = np.zeros((n_nodes,n_filt))
                for n in range(0,n_nodes):
                    for f in range(0,n_filt):
                        out[n,f] = np.sum(np.multiply(inp[n:n+field_size,:],weights[:,:,f]))
                    out[n,:] = out[n,:]+biases
            else: # Fully Connected Layer
                out = inp.dot(weights)
                out = out + biases
            if l == n_layers-1: # Output Unit
                out = 1/(1+np.exp(-out)) # Sigmoid
            else:
                out = out*(out>0) # ReLU
        else: # no weights available --> Flatten Layer
            out = inp.reshape(-1)
        inp = out
        curr_dim = inp.shape
    return (out > 0.5)
我的输入形状是(18 x 8)(18个时间步,8个特征)。 我的网络目前由一个卷积层(感受野大小=5,内核=6)、扁平层、完全连接层(10个节点和1个输出节点)组成。除输出功能外,所有激活功能均为整流器,这是sigmoid


我仔细检查了我的列表的索引,它们是正确的。很抱歉,我无法上载所有数据集。如果你知道会错过什么,我很高兴听到

你能发布你的代码吗?“为每个分类加载我的整个模型”-你这到底是什么意思?如果您调用了
model.save(…)
或在您的列车回调列表中有一个
ModelCheckpoint(…)
,则在磁盘中保存了最佳权重。您可以在函数中定义模型的体系结构(例如,
构建模型(…)
),只需调用
模型。加载权重(…)
,即可将其还原为原来的状态。您可以发布代码吗?“为每个分类加载整个模型”-这到底是什么意思?如果您调用了
model.save(…)
或在您的列车回调列表中有一个
ModelCheckpoint(…)
,则在磁盘中保存了最佳权重。您可以在函数中定义模型的体系结构(例如,
build\u model(…)
),只需调用
model.load\u weights(…)
,即可将其恢复到原来的状态。