利用tensorflow或keras通过“成对”样本建立神经网络模型

2024-06-11 18:52:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试用成对样本实现神经网络模型。具体如下:

原始数据:

  • 例如,形状为(100,50)的X_org,即具有50个特征的100个样本。在
  • 形状为(100,1)的Y形组织。在

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

X_org中随机选择2个样本(这样我们就有100*99/2个这样的组合)形成一个新的“成对”样本,预测目标,即新的y标签是两个相应的y_org标签(y_org_sample1-y_org_sample2)的减法。现在我们有了新的X_train和{}。在

我需要一个更多的a NN模型(DNN,CNN,LSTM,whatever…),用它我可以将来自X_train的一个成对样本的第一个子样本传递到模型中,得到一个结果,与第二个子样本的步骤相同。通过计算两个结果的相减,可以得到这对样本的预测。此预测将与Y_train中相应的Y标签进行比较。在

总的来说,我需要训练一个模型(更新权重),然后给它一个“成对”的样本(两个连续的子样本)。我之所以不选择“双臂”模型(例如,通过xxx.sub()合并两个手臂),是因为在测试过程中我只会提供一个子样本。最后,我将使用该模型预测一个子样本。在

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

看来Tensorflow对于这个任务来说更可行,如果keras也可以,请分享你的想法。在


Tags: org模型目标原始数据步骤train神经网络nn
1条回答
网友
1楼 · 发布于 2024-06-11 18:52:56

您可以首先创建一个只包含一个X_org-like元素的模型:

#create a model the way you like it, it can be Functional API or Sequential, no problem
xOrgModel = createAModelForXOrgData(...)

现在,让我们创建第二个模型,这一次必须使用函数API,它可以同时处理两个输入:

^{pr2}$

现在有两个模型: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,...)

相关问题 更多 >