Pytorch 培训网络的一部分

Pytorch 培训网络的一部分,pytorch,Pytorch,我是新的深入学习和学习。我有以下问题: 我的总体架构由我定义的一个网络(NN1)和另一个预训练网络(NN2)组成,因此NN1的输出就是NN2的输入。我想用NN2的输出和已知地面真相之间的差值(RMSE)来定义NN1的损失。 我需要通过NN2和NN1反向传播(训练NN1),而不改变NN2 我可以在NN2上使用requires\u grad=False,但它会禁用通过NN2的反向传播吗?如何在Pytorch中指定此要求 谢谢 您将使用两个不同的模块。第一个是模块/model/NN(NN1),第二个是

我是新的深入学习和学习。我有以下问题:

我的总体架构由我定义的一个网络(NN1)和另一个预训练网络(NN2)组成,因此NN1的输出就是NN2的输入。我想用NN2的输出和已知地面真相之间的差值(RMSE)来定义NN1的损失。 我需要通过NN2和NN1反向传播(训练NN1),而不改变NN2

我可以在NN2上使用
requires\u grad=False
,但它会禁用通过NN2的反向传播吗?如何在Pytorch中指定此要求


谢谢

您将使用两个不同的模块。第一个是模块/model/NN(NN1),第二个是预训练的模块

然后,您将使用
model\u nn1.train()
model\u nn2.eval()
。然后,您可以执行以下操作:

optimizer=torch.optim.Adam(model_nn1.parameters())#您可以使用自己喜欢的优化器
型号1.列车()
模型2.eval()
对于范围内的历元(历元):
对于数据加载器中的x,y:#根据torch.utils.data.dataloader,数据加载器是您的数据加载器
optimizer.zero_grad()
h_nn1=模型_nn1(x)#x是输入
y_hat=模型_nn2(h_nn1)#y_hat是输出
损失=火炬sqrt(火炬平均值((yhat-y)**2))
loss.backward()
optimizer.step()
您可以检查有关渐变操作的要求:

导入火炬 >>>x=火炬nn线性(2,3) >>>x2=火炬nn线性(3,2) >>>z=火炬的兰特(2,2) >>>y=火炬.兰特(2,2) >>>十、列车() 线性(输入特征=2,输出特征=3,偏差=真) >>>x2.eval() 线性(输入特征=3,输出特征=2,偏差=真) >>>h=x(z) >>>大学毕业生 真的 >>>y_hat=x2(h) >>>你需要毕业 真的
通常
需要_grad=False
应该这样做,但我不确定。也许你应该试着对一批数据进行训练,看看它是否收敛(故意使其过度拟合)。如果是这样的话,这就行了。