Python 如何利用pyTorch实现LSTM神经网络的bagging方法?
与标题一样,我的问题是如何使用PyTorch库为LSTM应用打包方法?我已经在python上使用TensorFlow构建了一个。但是现在使用C和C++来暗示系统,需要使用PyTrac?< /P> 有没有建议不需要使用Pytork,直接将基于tensorflow建立的模型应用于系统中的实际预测Python 如何利用pyTorch实现LSTM神经网络的bagging方法?,python,tensorflow,pytorch,Python,Tensorflow,Pytorch,与标题一样,我的问题是如何使用PyTorch库为LSTM应用打包方法?我已经在python上使用TensorFlow构建了一个。但是现在使用C和C++来暗示系统,需要使用PyTrac?< /P> 有没有建议不需要使用Pytork,直接将基于tensorflow建立的模型应用于系统中的实际预测 请帮忙 如果要在PyTorch中创建集成,可以分别训练多个模型,然后定义一个类将它们一起使用: class MyEnsemble(nn.Module): def __init__(self, fir
请帮忙 如果要在PyTorch中创建集成,可以分别训练多个模型,然后定义一个类将它们一起使用:
class MyEnsemble(nn.Module):
def __init__(self, firstModel, secondModel):
super(MyEnsemble, self).__init__()
self.firstModel = modelA
self.secondModel = modelB
self.classifier = nn.Linear(in_features, n_classes) #define accordingly
self.relu = nn.ReLU()
def forward(self, x1, x2):
x1 = self.firstModel(x1)
x2 = self.secondModel(x2)
x = torch.cat((x1, x2), dim=1)
x = self.classifier(self.relu(x))
return x
如果要使用TensorFlow模型,有多种方法。可以将它导出到C++ 。在PyTorch创建集成时,最好使用PyTrk中的<代码> NN.MultEclipse()/Cux>类。
nn.ModuleList()
具有与普通Python列表相同的功能,如append()
。创建这样的集合模型时,可以直接调用向后
操作,梯度下降将通过模型发生
下面是一个集成神经网络(EnsembleNet
),它使用NeuralNet
作为集成的单个NN实例
NeuralNet(nn.Module):
def __init__(self):
super(NeuralNet, self).__init__()
self.fc1 = nn.Linear(in_dim, out_dim)
self.fc2 = nn.Linear(out_dim, 1)
def forward(self, X):
""" X must be of shape [-1, in_dim]"""
X = self.fc1(X)
return torch.sigmoid(self.fc2(X))
EnsembleNet(nn.Module):
def __init__(self, net = NeuralNet, num_ensemble=5, seed_val=SEED):
super(EnsembleNet, self).__init__()
self.ensembles = nn.ModuleList()
for i in range(num_ensemble):
torch.manual_seed(seed_val*i+1)
if torch.cuda.is_available(): # To randomize init of NNs for Ensembles
torch.cuda.manual_seed(seed_val*i+1)
self.ensembles.append(net)
self.final = nn.Linear(num_ensemble, 1)
def forward(self, X_in_list):
pred = torch.cat([net(X_in_list[i]) for i,net in enumerate(self.ensembles)])
pred = pred.reshape(-1, len(self.ensembles))
return torch.sigmoid(self.final(pred))
要使用bagging,只需创建一个X_input_列表,其中列表的不同元素是从训练数据中用替换进行采样的张量。(您的X_输入_列表和num_集合的大小必须相同)
可以修改<代码>集成程序< /Cord>初始化代码,以获取不同神经网络的列表。
谢谢答案,但是它似乎在导出到C++之后降低了模型的准确性: