使用tensorflow或keras构建基于’pairwise’样本的神经网络模型

我正在尝试使用成对样本实现一个神经网络模型。详细信息如下所示:

原始数据:

  • 例如,X_org的形状为(100, 50),即100个样本,每个样本有50个特征。
  • Y_org的形状为(100, 1)。

处理这些原始数据以进行实际训练:

X_org中随机选择两个样本(因此我们有100*99/2种组合)形成一个新的’pairwise’样本,预测目标,即新的y标签,是两个相应y_org标签的差值(Y_org_sample1 – Y_org_sample2)。现在我们有了新的X_trainY_train

我需要一个神经网络模型(DNN、CNN、LSTM,无论什么都可以),我可以将X_train中一个成对样本的第一个子样本输入模型并得到一个结果,对第二个子样本进行相同的步骤。通过计算两个结果的差值,我可以得到这个成对样本的预测。这个预测将与Y_train中对应的Y标签进行比较。

总的来说,我需要在输入一个’pairwise’样本(两个连续的子样本)后训练模型(更新权重)。我之所以不选择’双臂’模型(例如通过xxx.sub()合并两个分支),是因为在测试过程中我只会输入一个子样本。最终我只会使用模型来预测一个子样本。

因此,我将在训练步骤中使用X_train中的数据,而在测试步骤中使用类似X_org的数据格式。这看起来有点复杂。

看起来Tensorflow对于这项任务更为可行,如果keras也适用,请分享你的想法。


回答:

你可以首先创建一个模型,该模型只接受一个类似X_org的元素:

#创建一个你喜欢的模型,可以是Functional API或Sequential,没有问题
xOrgModel = createAModelForXOrgData(...)

现在,让我们创建第二个模型,这次必须使用功能API,该模型可以处理两个输入:

from keras.models import Model
from keras.layers import Input, Subtract
input1 = Input(shapeOfInput)
input2 = Input(shapeOfInput)
output1 = xOrgModel(input1)
output2 = xOrgModel(input2)
output = Subtract()([output1,output2])
pairWiseModel = Model([input1,input2],output)

现在你有两个模型:xOrgModelpairWiseModel。你可以根据当前任务使用其中任何一个。

这两个模型共享它们的权重。这意味着你可以训练其中任何一个,另一个也会被更新。

使用成对模型

首先,将你的数据组织成两个独立的数组。(因为我们的模型使用两个输入)

L = len(X_org)
x1 = []
x2 = []
y = []
for i in range(L):
    for j in range(i+1,L):
        x1.append(X_org[i])
        x2.append(X_org[j])
        y.append(Y_org[i] - Y_org[j])
x1 = np.array(x1)
x2 = np.array(x2)
y = np.array(y)

使用输入列表进行训练和预测:

pairWiseModel.fit([x1,x2],y,...)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注