簡體   English   中英

在 pytorch、model 中使用相同的腳本和 model 隨機訓練

[英]In pytorch, model randomly trained when using same script and model

我正在使用 pytorch 制作神經網絡 model。 我參考教程搭建了一個簡單淺層的3層model。 然而,盡管使用相同的 model 和腳本,但訓練是隨機的。 換句話說,可以看出損失沒有下降大約 4 次,所以它沒有被訓練。 我不知道為什么 model 淺且不穩定。 如果有與我相同經驗或已解決問題的人能提供建議,我將不勝感激。

在此處輸入圖像描述這是相同的腳本運行結果。 4 次中有 1 次沒有訓練。 但我使用了相同的腳本和 model。 在學習的情況下和不學習的情況下,輸入張量的值是相同的。

我的腳本在這里。 x 輸入形狀為 [10000, 1]

import os
import pandas as pd
from sklearn.preprocessing import StandardScaler
import numpy as np

import torch.nn as nn
import torch.optim as optim

from sklearn.preprocessing import StandardScaler

import sys
import torch
from sklearn.preprocessing import StandardScaler
import re

os.chdir("...")
F1 = os.listdir(os.getcwd())
print(F1)


df = pd.read_excel('10000.xlsx', sheet_name=1)

Ang_tilt = torch.from_numpy(df['Ang_tilt'].values).unsqueeze(dim=1).float()
    
x_list = [Ang_tilt]

nb_epochs = 3000

import sys

#from aug_data_processing import *

import torch.nn as nn
import torch.optim as optim

from sklearn.preprocessing import StandardScaler

from matplotlib import pyplot as plt

########################################
####################model

#print(x_list)




net = Net(x_dim=Ang_tilt.size()[1])

criterion = nn.MSELoss()
# optimizer = torch.optim.Adam(model.parameters(), lr=1e-9)
optimizer = torch.optim.SGD(net.parameters(), lr=1e-6, momentum=0.7)
losses = []

################forward

for step in range(nb_epochs + 1):
    
    scaler = StandardScaler()

    Ang_tilt = scaler.fit_transform(Ang_tilt)
    Ang_tilt = torch.from_numpy(Ang_tilt).float()
    

    #print(x_list[i])
    prediction = net(Ang_tilt)
    #print(prediction)
    

    loss = criterion(input=prediction, target=y_label)
    optimizer.zero_grad()

    losses.append(loss.item())
    loss.backward()
    optimizer.step()

#print(Ang_tilt)
plt.title('3_layer_NN_loss_pre+post')
plt.xlabel('epoch')
plt.ylabel('losses')
plt.plot(range(nb_epochs+1), losses)

plt.show()






torch.save(obj=net, f='aug.pt')

這是網絡

from torch import nn
from torch.nn import functional as F
import torch

import torch
from torch.autograd import Variable
'''
x_dim = dimension을 바로

'''
class Net(nn.Module):
    def __init__(self, x_dim):
        super(Net, self).__init__()

        self.fc1 = nn.Linear(x_dim, 150)
        self.fc2 = nn.Linear(150, 100)
        self.fc3 = nn.Linear(100, 40)
        self.fc4 = nn.Linear(40,1)
        self.dropout = nn.Dropout(p=0.5)

        torch.nn.init.xavier_uniform_(self.fc1.weight)
        torch.nn.init.xavier_uniform_(self.fc2.weight)
        torch.nn.init.xavier_uniform_(self.fc3.weight)
        torch.nn.init.xavier_uniform_(self.fc4.weight)


    def forward(self, x):
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = F.relu(self.fc3(x))
        x = F.relu(self.fc4(x))


        return x

我通過打印我的參數找到了它。 不訓練的時候,體重太輕了。 所以我改變了 model 結構而不是解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM