Pytorch Pyrotch中的模型损耗没有变化
我正在用pytorch处理泰坦尼克号的数据Pytorch Pyrotch中的模型损耗没有变化,pytorch,Pytorch,我正在用pytorch处理泰坦尼克号的数据 这是我的模型和培训代码 import torch.nn.functional as F class Net(torch.nn.Module): def __init__(self): super(Net, self).__init__() self.fc1_1=torch.nn.Linear(13, 512) self.fc1_2=torch.nn.Linear(512, 64)
这是我的模型和培训代码
import torch.nn.functional as F
class Net(torch.nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1_1=torch.nn.Linear(13, 512)
self.fc1_2=torch.nn.Linear(512, 64)
self.fc1_3=torch.nn.Linear(64, 10)
self.fc2_1=torch.nn.Linear(13, 64)
self.fc2_2=torch.nn.Linear(64, 512)
self.fc2_3=torch.nn.Linear(512, 10)
self.fc3_1=torch.nn.Linear(13, 128)
self.fc3_2=torch.nn.Linear(128, 128)
self.fc3_3=torch.nn.Linear(128, 10)
self.fc_full_1=torch.nn.Linear(30, 64)
self.fc_full_2=torch.nn.Linear(64, 128)
self.fc_full_3=torch.nn.Linear(128, 2)
def forward(self, x):
x1=self.fc1_1(x)
x1=F.relu(x1)
x1=self.fc1_2(x1)
x1=F.relu(x1)
x1=self.fc1_3(x1)
x1=F.relu(x1)
x2=self.fc2_1(x)
x2=F.relu(x2)
x2=self.fc2_2(x2)
x2=F.relu(x2)
x2=self.fc2_3(x2)
x2=F.relu(x2)
x3=self.fc3_1(x)
x3=F.relu(x3)
x3=self.fc3_2(x3)
x3=F.relu(x3)
x3=self.fc3_3(x3)
x3=F.relu(x3)
x=torch.cat((x1, x2, x3), dim=1)
x=self.fc_full_1(x)
x=F.relu(x)
x=self.fc_full_2(x)
x=F.relu(x)
x=self.fc_full_3(x)
return x
model=Net()
for epoch in range(100):
model.train()
x_var = Variable(torch.FloatTensor(x_train))
y_var = Variable(torch.LongTensor(y_train))
optimizer.zero_grad()
train_pred = model(x_var)
loss =criterion(train_pred, y_var)
loss.backward()
optimizer.step()
train_acc=calc_accuracy(train_pred, y_var)
loss=loss.data.numpy()
如上所述,它们只是完全连接的层
模型损失函数与优化
交叉向性损失与adam
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model1.parameters(), lr=0.05)
这些是培训代码
import torch.nn.functional as F
class Net(torch.nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1_1=torch.nn.Linear(13, 512)
self.fc1_2=torch.nn.Linear(512, 64)
self.fc1_3=torch.nn.Linear(64, 10)
self.fc2_1=torch.nn.Linear(13, 64)
self.fc2_2=torch.nn.Linear(64, 512)
self.fc2_3=torch.nn.Linear(512, 10)
self.fc3_1=torch.nn.Linear(13, 128)
self.fc3_2=torch.nn.Linear(128, 128)
self.fc3_3=torch.nn.Linear(128, 10)
self.fc_full_1=torch.nn.Linear(30, 64)
self.fc_full_2=torch.nn.Linear(64, 128)
self.fc_full_3=torch.nn.Linear(128, 2)
def forward(self, x):
x1=self.fc1_1(x)
x1=F.relu(x1)
x1=self.fc1_2(x1)
x1=F.relu(x1)
x1=self.fc1_3(x1)
x1=F.relu(x1)
x2=self.fc2_1(x)
x2=F.relu(x2)
x2=self.fc2_2(x2)
x2=F.relu(x2)
x2=self.fc2_3(x2)
x2=F.relu(x2)
x3=self.fc3_1(x)
x3=F.relu(x3)
x3=self.fc3_2(x3)
x3=F.relu(x3)
x3=self.fc3_3(x3)
x3=F.relu(x3)
x=torch.cat((x1, x2, x3), dim=1)
x=self.fc_full_1(x)
x=F.relu(x)
x=self.fc_full_2(x)
x=F.relu(x)
x=self.fc_full_3(x)
return x
model=Net()
for epoch in range(100):
model.train()
x_var = Variable(torch.FloatTensor(x_train))
y_var = Variable(torch.LongTensor(y_train))
optimizer.zero_grad()
train_pred = model(x_var)
loss =criterion(train_pred, y_var)
loss.backward()
optimizer.step()
train_acc=calc_accuracy(train_pred, y_var)
loss=loss.data.numpy()
最后,印刷品的精度和损耗
Epoch 0
0.6900209 0.531578947368421
valid: 0.692668 0.4621212121212121
Epoch 10
0.6900209 0.531578947368421
valid: 0.692668 0.4621212121212121
Epoch 20
0.6900209 0.531578947368421
valid: 0.692668 0.4621212121212121
Epoch 30
0.6900209 0.531578947368421
valid: 0.692668 0.4621212121212121
Epoch 40
0.6900209 0.531578947368421
valid: 0.692668 0.4621212121212121
Epoch 50
0.6900209 0.531578947368421
valid: 0.692668 0.4621212121212121
Epoch 60
0.6900209 0.531578947368421
valid: 0.692668 0.4621212121212121
Epoch 70
0.6900209 0.531578947368421
valid: 0.692668 0.4621212121212121
Epoch 80
0.6900209 0.531578947368421
valid: 0.692668 0.4621212121212121
Epoch 90
0.6900209 0.531578947368421
valid: 0.692668 0.4621212121212121
如上所述,模型训练损失和有效损失根本没有改变。
问题似乎出在哪里?您的优化器不使用您的
模型的参数,而是使用其他一些模型1
optimizer = torch.optim.Adam(model1.parameters(), lr=0.05)
顺便说一句,您不必为每个历元使用model.train()
。您查看了数据吗?这行optimizer=torch.optim.Adam(model1.parameters(),lr=0.05)
。你是否碰巧有一个名为model1
的模型,并且正在更新它的重量,而不是model
的重量?天哪……这是我的严重错误。无论如何,谢谢你的评论